Python列表是否具有与dict.get等效的名称?

Python列表是否具有与dict.get等效的名称?,python,list,Python,List,我有一个整数列表。我想知道数字13是否出现在其中,如果出现,在哪里。我必须像下面的代码一样搜索列表两次吗 if 13 in intList: i = intList.index(13) 对于字典,有一个get函数,它将确定成员身份并使用相同的搜索执行查找。列表有类似的问题吗?您自己用index()方法回答了。如果找不到索引,则会引发异常,因此只需捕获以下内容: def getIndexOrMinusOne(a, x): try: return a.index(x) exc

我有一个整数列表。我想知道数字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

只要把你得到的东西放在一个函数中并使用它:)


如果我在列表中,您可以使用
:return list.index(i)
,也可以使用
try/except
,具体取决于您的偏好。

否,您所要求的内容没有直接匹配。Python邮件列表中有关于这一点,人们得出结论,如果您需要这一点,这可能是一种代码味道。如果您需要以这种方式测试成员资格,请考虑使用DICT或SET。

< P>您可以捕获ValueError异常,或者您可以这样做:

i = intList.index(13) if 13 in intList else -1
(Python 2.5+)

< BTW. >如果你要做一大堆类似的操作,你可以考虑建立反字典值-> index。< /P>
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]

不要使用空的except子句。除了索引器,你应该这样做。如果你需要这样做,你可能滥用了列表;这好像是密码的味道,嗯?这是有效的,我测试过了。。。exception不是空的,它包含返回值?他的意思是你不应该执行“全局”exception,而是指定你要捕获的内容、ValueError等。我猜,通过“empty”,他的意思是捕获所有异常类型,而不仅仅是你想要的异常类型。通过这种方式,可以很容易地检查一些您没有计划的错误。这只是浓缩了原始代码示例的语法。性能问题尚未解决。Python仍然会先测试列表中的项目,然后搜索列表中项目的索引。@David:没错。我可能应该删除代码,把重点放在第二段,这才是我真正的观点。其他的解决方案似乎都是用列表检查来换取昂贵的异常抛出/捕获情况。有人应该在2016年的主题帖子中重新提出这一要求:)我有一种感觉,随着map和reduce在主流流行中的普及,关于什么是“代码气味”的不同观点可能会浮出水面。