我有看起来像这样的代码:
thing_index = thing_list.index(thing)
otherfunction(thing_list, thing_index)
好的,所以简化了,但是您知道了。现在thing
可能实际上不在列表中,在这种情况下,我想通过-1 thing_index
。在其他语言中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
。” -这绝对是非Python的。如果操作不成功,则传递一个(无意义的)令牌值是令人讨厌的-异常确实是正确的方法。特别是因为thing_list[-1]
是一个有效的表达式,表示列表中的最后一个条目。