次のようなコードがあります。
thing_index = thing_list.index(thing)
otherfunction(thing_list, thing_index)
わかりましたので、それは簡略化されていますが、あなたはアイデアを得ます。現在thing
、実際にはリストにない場合がありthing_index
ます。その場合、-1をとして渡します。他の言語では、これはindex()
要素が見つからなかった場合に返されるはずです。実際にはをスローしValueError
ます。
私はこれを行うことができます:
try:
thing_index = thing_list.index(thing)
except ValueError:
thing_index = -1
otherfunction(thing_list, thing_index)
しかし、これは汚い感じValueError
がします。さらに、他の理由で発生する可能性があるかどうかはわかりません。ジェネレーター関数に基づいて次の解決策を考え出しましたが、少し複雑に見えます。
thing_index = ( [(i for i in xrange(len(thing_list)) if thing_list[i]==thing)] or [-1] )[0]
同じことを達成するためのより明確な方法はありますか?リストがソートされていないと仮定しましょう。
str.find
正確に実行するメソッドがあります-1
。件名に針が見つからないときに戻ります。
str.index()
検索文字列が見つからない場合は例外をスローします。
thing_index
」-これは間違いなくPythonicではありません。操作が成功しない場合に(無意味な)トークン値を渡すことは避けられます-例外は本当にここでは正しい方法です。特にthing_list[-1]
は有効な式なので、リストの最後のエントリを意味します。