Temukan elemen dalam daftar tupel

148

Saya punya daftar 'a'

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

Saya perlu menemukan semua tupel untuk nomor tertentu. katakan untuk 1 itu akan

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

Bagaimana aku melakukan itu?

Bruce
sumber

Jawaban:

241

Jika Anda hanya ingin angka pertama cocok, Anda dapat melakukannya seperti ini:

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

Jika Anda hanya mencari tupel dengan 1 di dalamnya:

[item for item in a if 1 in item]
Nadia Alramli
sumber
119

Sebenarnya ada cara cerdas untuk melakukan ini yang berguna untuk daftar tupel mana pun di mana ukuran setiap tupel adalah 2: Anda dapat mengubah daftar Anda menjadi satu kamus.

Sebagai contoh,

test = [("hi", 1), ("there", 2)]
test = dict(test)
print test["hi"] # prints 1
Steven Holtzen
sumber
11
Bagaimana Anda menerapkan ini pada masalah Bruce?
HelloGoodbye
5
Jawaban yang bagus (meskipun mungkin bukan untuk pertanyaan ini). Bekerja dengan baik bagi saya untuk menentukan apakah suatu nilai ada dalam daftar tupel pilihan (misalnya; jika "hai" dalam tes)
MagicLAMP
10
Itu tidak benar-benar menjawab pertanyaan, seperti yang disarankan MagicLAMP. Secara khusus, dict(X)mengubah X menjadi kamus di mana tupel terakhir dari elemen pertama yang umum, adalah nilai yang digunakan. Dalam contoh OP, ini akan menghasilkan (1,4) sebagai lawan dari (1,2) dan (1,4).
BBischof
24

Baca di Pemahaman Daftar

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

Baca juga fungsi generator dan yieldpernyataannya.

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

result= list( filter_value( a, 1 ) )
S. Lott
sumber
1
if x == 1harusif x == value
sambha
10
[tup for tup in a if tup[0] == 1]
Tendayi Mawushe
sumber
8
for item in a:
   if 1 in item:
       print item
anjing hantu74
sumber
2
>>> [i for i in a if 1 in i]

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

suyash
sumber
Meskipun benar, apa bedanya [item for item in a if 1 in item]dengan jawaban yang diterima yang diposting 8 tahun sebelumnya? Perhatikan juga ini juga akan cocok (2, 1)dan (4, 1).
Arjan
2

The filterFungsi juga dapat memberikan solusi menarik:

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

yang mencari tupel dalam daftar auntuk setiap kemunculan 1. Jika pencarian dibatasi pada elemen pertama, solusinya dapat diubah menjadi:

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

Menggunakan fungsi filter:

>>> def get_values ​​(iterables, key_to_find):
daftar kembali (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
sumber
1

Atau takewhile, (selain ini, contoh nilai lainnya akan ditampilkan):

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

jika tidak disortir, seperti:

>>> 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-Maju
sumber
0

jika Anda ingin mencari tuple untuk nomor apa pun yang ada di tuple maka Anda dapat menggunakan

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)

Anda juga dapat menggunakan if i==j[0] or i==j[index]jika Anda ingin mencari nomor di indeks tertentu

sunil nagori
sumber