Python列表是否与dict.get等效?

时间:2009-03-16 13:04:46

标签: python list

我有一个整数列表。我想知道数字13是否出现在其中,如果是,则在哪里。我是否必须在列表中搜索两次,如下面的代码所示?

if 13 in intList:
   i = intList.index(13)

对于词典,有一个get函数可以确定成员资格并使用相同的搜索执行查找。列表有类似的东西吗?

5 个答案:

答案 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,具体取决于您的偏好。