【问题标题】:What's the idiomatic python equivalent of get() for lists?列表中 get() 的惯用 python 等价物是什么?
【发布时间】:2011-10-08 21:39:02
【问题描述】:

如果字典中不存在键,则默认情况下在字典上调用 get(key) 将返回 None。列表的惯用等效项是什么,如果列表的大小至少是传入索引的大小,则返回元素,否则返回 None?

换种说法,这个函数的更惯用/更紧凑的版本是什么:

def get(l, i):
    if i < len(l):
        return l[i]
    else:
        return None

【问题讨论】:

  • 在大多数情况下,我使用defaultdict 而不是dict.get(),如果更适合您的用例,您也可以提出defaultlist
  • 你认为你为什么需要这个?索引列表通常不是人们推测的事情。换一种说法;列表通常以这样一种方式使用,即我们对每个元素都应用一个动作;而不是一个显着的元素(如果它存在的话)。您似乎正在使用一个列表来处理一些不寻常的事情(也许一个类会更好?)

标签: python idioms


【解决方案1】:

你的实现是Look Before You Leap-style。改为execute the code and catch errors 是pythonic:

def get(l, i, d=None):
    try:
        return l[i]
    except IndexError:
        return d

【讨论】:

    【解决方案2】:

    如果您希望l[i] 经常不存在,请使用:

    def get(l,i):
        return l[i] if i<len(l) else None
    

    如果您期望l[i] 几乎总是存在,那么请使用try...except

    def get(l,i):
        try:
            return l[i] 
        except IndexError:
            return None
    

    基本原理:try...except 在引发异常时代价高昂,但在其他情况下相当快。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-05-31
      • 2021-06-19
      • 1970-01-01
      • 1970-01-01
      • 2013-10-18
      • 1970-01-01
      • 2011-09-03
      • 2011-03-07
      相关资源
      最近更新 更多