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?

Bruce
quelle

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]
Nadia Alramli
quelle
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
Steven Holtzen
quelle
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 ) )
S.Lott
quelle
1
if x == 1sollte seinif x == value
Sambha
10
[tup for tup in a if tup[0] == 1]
Tendayi Mawushe
quelle
8
for item in a:
   if 1 in item:
       print item
Ghostdog74
quelle
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)]
Pradam
quelle
1
>>> [i for i in a if 1 in i]

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

suyash
quelle
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)]
>>> 
U10-Vorwärts
quelle
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))
MxNx
quelle
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

Sunil Nagori
quelle