【发布时间】:2011-01-09 02:47:50
【问题描述】:
我的代码看起来像这样:
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]
有没有更简洁的方法来实现同样的目标?假设列表没有排序。
【问题讨论】:
-
"...在这种情况下,我想将 -1 作为
thing_index传递。" - 这绝对不是 Pythonic。在操作不成功的情况下传递(无意义的)令牌值是不受欢迎的 - 异常在这里确实是正确的方法。特别是因为thing_list[-1]是一个有效的表达式,表示列表中的最后一个条目。 -
@jellybean: facepalm...发现 java 编码器:P
-
@Tim:有
str.find方法可以做到这一点:当在主题中找不到针时返回-1。 -
@Tim None 会更好......这类似于 dict[key] vs dict.get[key]
-
@SilentGhost:嗯,很有趣。我可能需要更详细地研究这一点。如果没有找到搜索字符串,
str.index()会抛出异常。