Şuna benzer bir kodum var:
thing_index = thing_list.index(thing)
otherfunction(thing_list, thing_index)
tamam yani bu basitleştirildi ama anladınız. Şimdi thing
aslında listede olmayabilir, bu durumda -1'i olarak geçirmek istiyorum thing_index
. Diğer dillerde index()
, öğeyi bulamazsa döndürmeyi umduğunuz şey budur . Aslında bir ValueError
.
Bunu yapabilirim:
try:
thing_index = thing_list.index(thing)
except ValueError:
thing_index = -1
otherfunction(thing_list, thing_index)
Ama bu kirli hissettiriyor, ayrıca ValueError
başka bir nedenden dolayı yükseltilebilir mi bilmiyorum . Jeneratör işlevlerine göre aşağıdaki çözümü buldum, ancak biraz karmaşık görünüyor:
thing_index = ( [(i for i in xrange(len(thing_list)) if thing_list[i]==thing)] or [-1] )[0]
Aynı şeyi elde etmenin daha temiz bir yolu var mı? Listenin sıralanmadığını varsayalım.
str.find
Tam olarak bunu yapan bir yöntem var: öznede -1
iğne bulunmadığında geri döner .
str.index()
arama dizesi bulunmazsa bir istisna oluşturur.
thing_index
." - Bu kesinlikle Pythonic değil. Bir işlemin başarılı olmaması durumunda (anlamsız) bir belirteç değeri iletmek hoş karşılanmaz - burada istisnalar gerçekten doğru yoldur. Özelliklething_list[-1]
geçerli bir ifade olduğundan, listedeki son girdi anlamına gelir.