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:
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]
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
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).
Baca di Pemahaman Daftar
[ (x,y) for x, y in a if x == 1 ]
Baca juga fungsi generator dan yield
pernyataannya.
def filter_value( someList, value ):
for x, y in someList:
if x == value :
yield x,y
result= list( filter_value( a, 1 ) )
if x == 1
harusif x == value
[tup for tup in a if tup[0] == 1]
for item in a:
if 1 in item:
print item
The filter
Fungsi juga dapat memberikan solusi menarik:
result = list(filter(lambda x: x.count(1) > 0, a))
yang mencari tupel dalam daftar a
untuk setiap kemunculan 1
. Jika pencarian dibatasi pada elemen pertama, solusinya dapat diubah menjadi:
result = list(filter(lambda x: x[0] == 1, a))
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)]
>>>
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