代码之家  ›  专栏  ›  技术社区  ›  Tommy Herbert

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

  •  8
  • Tommy Herbert  · 技术社区  · 17 年前

    我有一个整数列表。我想知道数字13是否出现在里面,如果是的话,在哪里。我需要像下面的代码那样搜索列表两次吗?

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

    对于字典,有一个 get 用于确定成员身份并使用相同搜索执行查找的函数。列表中有类似的内容吗?

    5 回复  |  直到 10 年前
        1
  •  12
  •   Ali Afshar    17 年前

    你自己回答的,用 index() 方法。如果找不到索引,这将引发异常,因此只需捕获:

    def getIndexOrMinusOne(a, x):
      try:
        return a.index(x)
      except ValueError:
        return -1
    
        2
  •  8
  •   Ali Afshar    17 年前

    看起来你只需要抓住例外…

    try:
        i = intList.index(13)
    except ValueError:
        i = some_default_value
    
        3
  •  4
  •   John Feminella    17 年前

    不,你要的东西没有直接匹配的。有 a discussion a while back 在关于这个的python邮件列表中,人们得出结论,如果需要的话,这可能是一种代码味道。考虑使用 双关语 设置 相反,如果你需要用这种方式测试会员资格。

        4
  •  2
  •   vartec    17 年前

    您可以捕获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]
    
        5
  •  -1
  •   kender    17 年前

    把你得到的放到一个函数中,然后使用它:)

    你也可以用 if i in list: return list.index(i) try/except ,取决于您的偏好。

    推荐文章