Saya memiliki kode yang terlihat seperti ini:
thing_index = thing_list.index(thing)
otherfunction(thing_list, thing_index)
ok jadi itu disederhanakan tetapi Anda mendapatkan idenya. Sekarang thing
mungkin tidak benar-benar ada dalam daftar, dalam hal ini saya ingin meneruskan -1 sebagai thing_index
. Dalam bahasa lain, inilah yang Anda harapkan index()
untuk dikembalikan jika tidak dapat menemukan elemennya. Sebenarnya itu melempar ValueError
.
Saya bisa melakukan ini:
try:
thing_index = thing_list.index(thing)
except ValueError:
thing_index = -1
otherfunction(thing_list, thing_index)
Tapi ini terasa kotor, ditambah lagi saya tidak tahu apakah ValueError
bisa dibesarkan karena alasan lain. Saya datang dengan solusi berikut berdasarkan fungsi generator, tetapi tampaknya sedikit rumit:
thing_index = ( [(i for i in xrange(len(thing_list)) if thing_list[i]==thing)] or [-1] )[0]
Adakah cara yang lebih bersih untuk mencapai hal yang sama? Mari kita asumsikan bahwa daftar tersebut tidak diurutkan.
str.find
metode yang melakukan persis seperti itu: mengembalikan -1
ketika jarum tidak ditemukan dalam subjek.
str.index()
tidak melempar pengecualian jika string pencarian tidak ditemukan.
thing_index
." - Ini jelas tidak Pythonic. Meneruskan nilai token (tidak berarti) jika operasi tidak berhasil tidak disukai - pengecualian benar-benar cara yang tepat di sini. Terutama karenathing_list[-1]
merupakan ekspresi yang valid, yang berarti entri terakhir dalam daftar.