Rechercher un élément dans une liste de tuples


140

J'ai une liste 'a'

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

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

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

Comment je fais ça?

Réponses:


236

Si vous voulez juste que le premier numéro corresponde, vous pouvez le faire comme ceci:

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

Si vous recherchez simplement des tuples contenant 1:

[item for item in a if 1 in item]

115

Il existe en fait une manière intelligente de faire cela 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

11
Comment appliquez-vous cela au problème de Bruce?
HelloGoodbye

5
Bonne réponse (mais peut-être pas pour cette question). Cela a bien fonctionné pour moi de déterminer si une valeur était dans une liste de tuples de choix (par exemple, si "salut" dans le test)
MagicLAMP

10
Cela ne répond pas vraiment à la question, comme le suggère MagicLAMP. Plus précisément, dict(X)convertit X en un dictionnaire où le dernier tuple de tout premier élément commun est la valeur utilisée. Dans l'exemple de l'OP, cela renverrait (1,4) par opposition aux deux (1,2) et (1,4).
BBischof





1

La filterfonction peut également apporter 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ée en:

result = list(filter(lambda x: x[0] == 1, a))

1

Utilisation de la fonction de filtre:

>>> def get_values ​​(iterables, key_to_find):
liste de retour (filtre (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)]

1

Ou takewhile, (en plus de cela, un exemple de plus de valeurs est affiché):

>>> a= [(1,2),(1,4),(3,5),(5,7),(0,2)]
>>> import itertools
>>> list(itertools.takewhile(lambda x: x[0]==1,a))
[(1, 2), (1, 4)]
>>> 

si non trié, comme:

>>> a= [(1,2),(3,5),(1,4),(5,7)]
>>> import itertools
>>> list(itertools.takewhile(lambda x: x[0]==1,sorted(a,key=lambda x: x[0]==1)))
[(1, 2), (1, 4)]
>>> 

0

si vous souhaitez rechercher un tuple pour tout nombre présent dans le tuple, vous pouvez utiliser

a= [(1,2),(1,4),(3,5),(5,7)]
i=1
result=[]
for j in a:
    if i in j:
        result.append(j)

print(result)

Vous pouvez également utiliser if i==j[0] or i==j[index]si vous souhaitez rechercher un numéro dans un index particulier

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.