Trova un elemento in un elenco di tuple


140

Ho un elenco "a"

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

Devo trovare tutte le tuple per un determinato numero. dire per 1 sarà

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

Come lo faccio?

Risposte:


236

Se vuoi solo far corrispondere il primo numero, puoi farlo in questo modo:

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

Se stai solo cercando tuple con 1 in esse:

[item for item in a if 1 in item]

115

Esiste in realtà un modo intelligente per farlo che è utile per qualsiasi elenco di tuple in cui la dimensione di ogni tupla è 2: puoi convertire il tuo elenco in un singolo dizionario.

Per esempio,

test = [("hi", 1), ("there", 2)]
test = dict(test)
print test["hi"] # prints 1

11
Come si applica questo al problema di Bruce?
Ciao Arrivederci

5
Buona risposta (anche se forse non per questa domanda). Ha funzionato bene per me per determinare se un valore era in un elenco di tuple scelte (ad esempio, se "ciao" nel test)
MagicLAMP

10
In realtà non risponde alla domanda, come suggerisce MagicLAMP. In particolare, dict(X)converte X in un dizionario in cui l'ultima tupla di qualsiasi primo elemento comune è il valore utilizzato. Nell'esempio del PO, ciò restituirebbe (1,4) rispetto a entrambi (1,2) e (1,4).
BBischof,




2
>>> [i for i in a if 1 in i]

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


1

La filterfunzione può anche fornire una soluzione interessante:

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

che cerca le tuple nell'elenco per ogni occorrenza di 1. Se la ricerca è limitata al primo elemento, la soluzione può essere modificata in:

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

1

Utilizzando la funzione filtro:

>>> def get_values ​​(iterables, key_to_find):
lista di restituzione (filtro (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

Oppure takewhile, (oltre a questo, viene mostrato un esempio di più valori):

>>> 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)]
>>> 

se non ordinato, come:

>>> 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

se si desidera cercare tuple per qualsiasi numero presente nella tupla, è possibile utilizzare

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)

È inoltre possibile utilizzare if i==j[0] or i==j[index]se si desidera cercare un numero in un indice specifico

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.