在字典上调用get(key)函数,如果字典中不存在该键,则默认返回None。那么对于列表来说,当列表长度至少为传入的索引时返回元素,否则返回None,有什么惯用的等效方法呢?
换句话说,有没有更加惯用/紧凑的版本实现这个函数:
def get(l, i):
if i < len(l):
return l[i]
else:
return None
您的实现是基于“先判断再执行”的风格(Look Before You Leap)。在Python中,更符合Pythonic的做法是先执行代码,再捕获错误:
def get(l, i, d=None):
try:
return l[i]
except IndexError:
return d
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
的执行开销很大,但在没有异常抛出时,则运行相对较快。
defaultdict
而不是dict.get()
,如果更适合您的用例,您也可以想出一个defaultlist
。 - Michael Hoffman