我有一个整数列表。 我想知道数字13是否出现在其中,如果是,还想知道它在哪里。 我需要像下面的代码一样两次搜索列表吗?
if 13 in intList:
i = intList.index(13)
对于字典类型,有一个get
函数,它可以确定成员资格并执行相同搜索的查找。 那么列表是否有类似的函数呢?
你自己回答了这个问题,使用index()
方法。如果未找到索引,它将抛出异常,因此只需捕获异常即可:
def getIndexOrMinusOne(a, x):
try:
return a.index(x)
except ValueError:
return -1
看起来你只能捕获异常了...
try:
i = intList.index(13)
except ValueError:
i = some_default_value
没有直接符合您要求的匹配。Python邮件列表曾经有过一次关于此问题的讨论,人们得出结论,如果您需要这样做,那么这可能是一种代码异味。如果需要测试成员身份,请考虑使用dict或set。
i = intList.index(13) if 13 in intList else -1
(Python 2.5+)
顺便说一下,如果你要执行一大批类似的操作,可以考虑构建反向字典值 -> 索引。
intList = [13,1,2,3,13,5,13]
indexDict = defaultdict(list)
for value, index in zip(intList, range(len(intList))):
indexDict[value].append(index)
indexDict[13]
[0, 4, 6]
将你拥有的内容放入一个函数中并使用它 :)
您可以根据自己的偏好,使用if i in list: return list.index(i)
或者 try/except
。