Trouver un élément dans une liste de tuples

J'ai une liste 'a'

a= [(1,2),(1,4),(3,5),(5,7)]

J'ai besoin de trouver toutes les tuples pour un nombre particulier. dites pour 1 ce sera

result = [(1,2),(1,4)]

Comment puis-je faire ça?

99
demandé sur Wolf 2010-02-03 15:08:58

8 réponses

Si vous voulez juste que le premier nombre corresponde, vous pouvez le faire comme ceci:

[item for item in a if item[0] == 1]

Si vous recherchez simplement des tuples avec 1 en eux:

[item for item in a if 1 in item]
171
répondu Nadia Alramli 2015-08-25 12:25:55

Il existe en fait une façon intelligente de le faire qui est utile pour toute liste de tuples où la taille de chaque tuple est 2: Vous pouvez convertir votre liste en un seul dictionnaire.

Par exemple

test = [("hi", 1), ("there", 2)]
test = dict(test)
print test["hi"] # prints 1
83
répondu Steven Holtzen 2013-08-17 00:29:03

Lire sur Liste compréhensions

[ (x,y) for x, y in a if x  == 1 ]

Également lire jusqu' générateur de fonctions et le yield déclaration.

def filter_value( someList, value ):
    for x, y in someList:
        if x == value :
            yield x,y

result= list( filter_value( a, 1 ) )
16
répondu S.Lott 2015-05-15 04:54:42
[tup for tup in a if tup[0] == 1]
7
répondu Tendayi Mawushe 2010-02-03 12:15:07
for item in a:
   if 1 in item:
       print item
5
répondu ghostdog74 2010-02-03 12:13:01
>>> [i for i in a if 1 in i]

[(1, 2), (1, 4)]

1
répondu suyash 2018-05-03 09:38:21

La fonction filter peut également fournir une solution intéressante:

result = list(filter(lambda x: x.count(1) > 0, a))

Qui recherche les tuples dans la liste pour toute occurrence de 1. Si la recherche est limitée au premier élément, la solution peut être modifié en:

result = list(filter(lambda x: x[0] == 1, a))
0
répondu MxNx 2017-12-07 20:59:26

Utilisation de la fonction de filtre:

>>> def get_values(iterables, key_to_find):
return list(filter(lambda x:key_to_find in x, iterables)) >>> a = [(1,2),(1,4),(3,5),(5,7)] >>> get_values(a, 1) >>> [(1, 2), (1, 4)]
0
répondu pradam 2017-12-22 10:53:13