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?

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]

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

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

1
if x == 1harusif x == value
sambha



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

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


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

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

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

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

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.