Saya mengulangi daftar dan saya ingin mencetak indeks item jika memenuhi kondisi tertentu. Bagaimana saya melakukan ini?
Contoh:
testlist = [1,2,3,5,3,1,2,1,6]
for item in testlist:
if item == 1:
print position
Hmmm. Ada jawaban dengan pemahaman daftar di sini, tetapi hilang.
Sini:
[i for i,x in enumerate(testlist) if x == 1]
Contoh:
>>> testlist
[1, 2, 3, 5, 3, 1, 2, 1, 6]
>>> [i for i,x in enumerate(testlist) if x == 1]
[0, 5, 7]
Memperbarui:
Oke, Anda ingin ekspresi generator, kami akan memiliki ekspresi generator. Inilah pemahaman daftar lagi, dalam for for:
>>> for i in [i for i,x in enumerate(testlist) if x == 1]:
... print i
...
0
5
7
Sekarang kita akan membangun generator ...
>>> (i for i,x in enumerate(testlist) if x == 1)
<generator object at 0x6b508>
>>> for i in (i for i,x in enumerate(testlist) if x == 1):
... print i
...
0
5
7
dan cukup bagus, kita dapat menetapkan itu ke variabel, dan menggunakannya dari sana ...
>>> gen = (i for i,x in enumerate(testlist) if x == 1)
>>> for i in gen: print i
...
0
5
7
Dan untuk berpikir saya digunakan untuk menulis FORTRAN.
args = ['x', '-p1', 'v1', '-p2', 'v2']
. Kemudian perintahargs[[i for i, x in enumerate(args) if x == '-p1'][0] + 1]
kembali'v1'
Bagaimana dengan yang berikut ini?
Jika Anda tidak yakin apakah elemen yang dicari sebenarnya ada dalam daftar, Anda bisa menambahkan pemeriksaan pendahuluan, seperti
atau
atau "cara pythonic", yang tidak terlalu saya sukai karena kode kurang jelas, tetapi kadang-kadang lebih efisien,
sumber
ValueError
Gunakan enumerasi:
sumber
xrange bukan rentang seperti yang diminta (lihat komentar).
sumber
xrange
dihapus dalam Python 3.x, karena yang barurange
adalah yang lamaxrange
Inilah cara lain untuk melakukan ini:
sumber
sumber
Coba yang berikut ini:
sumber
Jika daftar Anda menjadi cukup besar dan Anda hanya diharapkan untuk menemukan nilai dalam sejumlah indeks, pertimbangkan bahwa kode ini dapat mengeksekusi lebih cepat karena Anda tidak perlu mengulangi setiap nilai dalam daftar.
Jika Anda berharap untuk menemukan nilai banyak Anda mungkin harus menambahkan "indeks" ke daftar dan mencetak daftar di akhir untuk menghemat waktu per iterasi.
sumber
Saya pikir mungkin ada gunanya menggunakan metode curselection () dari library Tkinter thte:
Metode ini berfungsi pada widget listbox Tkinter, jadi Anda harus membuat salah satunya daripada daftar.
Ini akan mengembalikan posisi seperti ini:
('0',) (meskipun versi Tkinter nantinya dapat mengembalikan daftar ints sebagai gantinya)
Yang mana untuk posisi pertama dan nomor akan berubah sesuai dengan posisi item.
Untuk informasi lebih lanjut, lihat halaman ini: http://effbot.org/tkinterbook/listbox.htm
Salam pembuka.
sumber
Mengapa menyulitkan?
sumber
Hanya untuk menggambarkan contoh lengkap beserta
input_list
yang memilikisearies1
(contoh: input_list [0]) di mana Anda ingin melakukan pencarianseries2
(contoh: input_list [1]) dan dapatkan indeks seri2 jika ada di seri1.Catatan: Anda
certain condition
akan menggunakan ekspresi lambda jika kondisinya sederhanakeluaran:
sumber
Saya kira itulah yang Anda inginkan. ;-) 'id' akan selalu menjadi indeks nilai-nilai pada daftar.
sumber