我有一个整数列表。我想知道数字13是否出现在其中,如果是,则在哪里。我是否必须在列表中搜索两次,如下面的代码所示?
if 13 in intList:
i = intList.index(13)
对于词典,有一个get
函数可以确定成员资格并使用相同的搜索执行查找。列表有类似的东西吗?
答案 0 :(得分:12)
您自己使用index()
方法回答了问题。如果找不到索引,那将抛出异常,所以只需捕获:
def getIndexOrMinusOne(a, x):
try:
return a.index(x)
except ValueError:
return -1
答案 1 :(得分:8)
看起来你只需抓住异常......
try:
i = intList.index(13)
except ValueError:
i = some_default_value
答案 2 :(得分:4)
不,没有与您要求的直接匹配。 Python邮件列表中有关于此的 a discussion a while back ,人们得出的结论是,如果您需要这可能是代码味道。如果您需要以这种方式测试成员资格,请考虑使用 dict 或 set 。
答案 3 :(得分:2)
您可以捕获ValueError异常,或者您可以执行以下操作:
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]
答案 4 :(得分:-1)
把你所得到的东西放在一个函数中并使用它:)
您可以使用if i in list: return list.index(i)
或try/except
,具体取决于您的偏好。