Jawaban:
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 perintah args[[i for i, x in enumerate(args) if x == '-p1'][0] + 1]kembali'v1'
Bagaimana dengan yang berikut ini?
print testlist.index(element)
Jika Anda tidak yakin apakah elemen yang dicari sebenarnya ada dalam daftar, Anda bisa menambahkan pemeriksaan pendahuluan, seperti
if element in testlist:
print testlist.index(element)
atau
print(testlist.index(element) if element in testlist else None)
atau "cara pythonic", yang tidak terlalu saya sukai karena kode kurang jelas, tetapi kadang-kadang lebih efisien,
try:
print testlist.index(element)
except ValueError:
pass
ValueError
for i in xrange(len(testlist)):
if testlist[i] == 1:
print i
xrange bukan rentang seperti yang diminta (lihat komentar).
xrangedihapus dalam Python 3.x, karena yang baru rangeadalah yang lamaxrange
Inilah cara lain untuk melakukan ini:
try:
id = testlist.index('1')
print testlist[id]
except ValueError:
print "Not Found"
[x for x in range(len(testlist)) if testlist[x]==1]
Coba yang berikut ini:
testlist = [1,2,3,5,3,1,2,1,6]
position=0
for i in testlist:
if i == 1:
print(position)
position=position+1
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.
lookingFor = 1
i = 0
index = 0
try:
while i < len(testlist):
index = testlist.index(lookingFor,i)
i = index + 1
print index
except ValueError: #testlist.index() cannot find lookingFor
pass
Jika Anda berharap untuk menemukan nilai banyak Anda mungkin harus menambahkan "indeks" ke daftar dan mencetak daftar di akhir untuk menghemat waktu per iterasi.
Saya pikir mungkin ada gunanya menggunakan metode curselection () dari library Tkinter thte:
from Tkinter import *
listbox.curselection()
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.
Hanya untuk menggambarkan contoh lengkap beserta input_listyang memiliki searies1(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 conditionakan menggunakan ekspresi lambda jika kondisinya sederhana
input_list = [[1,2,3,4,5,6,7],[1,3,7]]
series1 = input_list[0]
series2 = input_list[1]
idx_list = list(map(lambda item: series1.index(item) if item in series1 else None, series2))
print(idx_list)
keluaran:
[0, 2, 6]