Suchen Sie ein Element in einer Liste von Tupeln


139

Ich habe eine Liste 'a'

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

Ich muss alle Tupel für eine bestimmte Nummer finden. sag für 1 wird es sein

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

Wie mache ich das?

Antworten:


236

Wenn Sie nur möchten, dass die erste Zahl übereinstimmt, können Sie dies folgendermaßen tun:

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

Wenn Sie nur nach Tupeln mit 1 suchen:

[item for item in a if 1 in item]

115

Es gibt tatsächlich eine clevere Möglichkeit, die für jede Liste von Tupeln nützlich ist, bei der die Größe jedes Tupels 2 beträgt: Sie können Ihre Liste in ein einziges Wörterbuch konvertieren.

Beispielsweise,

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

11
Wie wenden Sie dies auf das Problem von Bruce an?
HelloGoodbye

5
Gute Antwort (wenn auch möglicherweise nicht für diese Frage). Es hat gut funktioniert, um festzustellen, ob ein Wert in einer Liste von Auswahltupeln enthalten war (z. B. wenn "hi" im Test)
MagicLAMP

10
Es beantwortet die Frage nicht wirklich, wie MagicLAMP vorschlägt. Insbesondere dict(X)wandelt X in ein Wörterbuch , in dem das letzte Tupel von jedem gemeinsamen ersten Elemente, der Wert ist, der verwendet wird. Im Beispiel des OP würde dies (1,4) im Gegensatz zu (1,2) und (1,4) zurückgeben.
BBischof

23

Lesen Sie mehr über Listenverständnisse

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

Lesen Sie auch die Generatorfunktionen und die yieldAnweisung nach.

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

result= list( filter_value( a, 1 ) )

1
if x == 1sollte seinif x == value
Sambha



1

Filterfunktion verwenden:

>>> def get_values ​​(iterables, key_to_find):
Rückgabeliste (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)]


1

Oder takewhile(zusätzlich wird ein Beispiel für weitere Werte gezeigt):

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

wenn unsortiert, wie:

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

Die filterFunktion kann auch eine interessante Lösung bieten:

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

Hiermit werden die Tupel in der Liste nach Vorkommen von durchsucht 1. Wenn die Suche auf das erste Element beschränkt ist, kann die Lösung geändert werden in:

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

0

Wenn Sie das Tupel nach einer beliebigen Zahl durchsuchen möchten, die im Tupel vorhanden ist, können Sie verwenden

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)

Sie können auch verwenden, if i==j[0] or i==j[index]wenn Sie eine Nummer in einem bestimmten Index suchen möchten

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.