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?
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 ) )
sumber
if x == 1
harusif x == value
[tup for tup in a if tup[0] == 1]
sumber
for item in a: if 1 in item: print item
sumber
>>> [i for i in a if 1 in i]
[(1, 2), (1, 4)]
sumber
[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)
.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 kemunculan1
. Jika pencarian dibatasi pada elemen pertama, solusinya dapat diubah menjadi:result = list(filter(lambda x: x[0] == 1, a))
sumber
Menggunakan fungsi filter:
sumber
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)] >>>
sumber
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 tertentusumber