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?
6 Réponses :
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]]
@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.
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!")
for tick in data:
if tick[0][0]==user_input:
print(tick)
else:
pass
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
commentaires parti bc explication ajoutée
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]
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]]