1
votes

Rechercher un élément de tuple dans une liste de listes sans modifier la structure des données

Je voudrais rechercher l'entrée utilisateur dans un tuple situé dans une liste de listes.

data = [[('tick1',12),4],[('tick2', 16),7]]

data = dict(data)

if not any('tick2' in x for x in data):
    print('not found')
else:
    print('found:', x)

#Output
found: [('tick2', 16), 7]

Je peux le faire si je change ma liste en dictionnaire:

XXX

Mais comment puis-je faire cela si je veux conserver le type de liste?


0 commentaires

6 Réponses :


2
votes

Vous pouvez utiliser une compréhension de liste pour parcourir les sous-listes et vérifier l'entrée utilisateur dans x [0] qui est un tuple

data = [[('tick1',12),4],[('tick2', 16),7]]

user_input = 'tick1'

output = [x for x in data if user_input in x[0]]
# [[('tick1', 12), 4]]


4 commentaires

@iamchoosinganame: Cela fonctionne pour moi. S'il vous plaît essayez-le et faites-moi savoir le tirage au sort


@iamchoosinganame, non, car x [0] est un tuple


@iamchoosinganame: Non, ce n'est pas le cas. Remplacez tick2 par tick12 et voyez


J'ai modifié mon commentaire original pour mentionner que je me suis trompé à ce sujet.



3
votes

Vous parcourez simplement tous les éléments de la liste:

if any(True for (name, num), other in data if name == user_input):
# Or: if any(name == user_input for (name, num), other in data):
    print("Found it!")

Ou, si vous êtes dans la compréhension:

for (name, num), other in data:
    if name == user_input:
        print("Found it!")


0 commentaires

1
votes
for tick in data:
    if tick[0][0]==user_input:
        print(tick)
    else:
        pass

0 commentaires

0
votes
data = [[('tick1',12),4],[('tick2', 16),7]] # user stored dat
userinput = input() # user giving input

def fun(userinput, data): # a function taking 2 argument, data, userinput
    for i in data: # iterate over each element inside data
        if i[0][0]==userinput: # check if value at position [0][0] is equal to user input
            return i # if equal return that value
    return 'not found' # if no value found equal then return not found

print(fun(userinput, data)) # calling of function and giving input argument , printing the result of return  of the function

1 commentaires

commentaires parti bc explication ajoutée



1
votes

vous pouvez utiliser la fonction next () pour obtenir la première correspondance et utiliser son paramètre par défaut pour le cas où l'élément ne serait pas dans la liste:

data = [[('tick1',12),4],[('tick2', 16),7]]
result = next( (item for item in data if item[0][0] == 'tick1'), "not found")
print(result) # [('tick1', 12), 4]


0 commentaires

0
votes

Collecter toute la liste avec le premier élément est égal à input_value. Vérifiez ensuite la taille si elle est trouvée ou non.

data = [[('tick1',12),4],[('tick12', 16),7], [('tick1', 11), 4]]
x = 'tick1'
search=[n for n in data for t in n[0] if t==x ]
if len(search) > 0:
    print('found:', search)
else:
    print('not found:', x)

Result: found: [[('tick1', 12), 4], [('tick1', 11), 4]]


0 commentaires