python是否有类似于字典的列表的内置get()?

rpq*_*rpq 1 python

我想从列表中提取一个项目并返回默认值(如果没有找到)(而不是通常的索引例外).与字典上的get(key,default)非常相似.在仔细阅读文档之后,感觉我仍然忽略了一个提供此功能的简单内置python解决方案.

这是我能想到的最快的:

def pluck(list_items, index, default=None):
  return dict(zip(range(len(list_items)), list_items)).get(index, default)

s = [1, 2,]
pluck(s, 3, None)
Run Code Online (Sandbox Code Playgroud)

谢谢!

Syl*_*sne 5

根据您期望尝试访问数组边界之外的频率,您应该捕获异常(如果预期失败很少),或者测试索引是否有效,否则返回默认值.

如果预计失败很少,这应该是最快的解决方案:

def pluck(items, index, defval):
    try:
        return items[index]
    except IndexError:
        return defval
Run Code Online (Sandbox Code Playgroud)

如果预计它们会频繁出现,最好检查索引是否有效:

def pluck(items, index, defval):
    return items[index] if -len(items) <= index < len(items) else defval
Run Code Online (Sandbox Code Playgroud)

请注意,如果使用负数索引,则有效abs(index) <= len(items).items[-1]相当于items[len(items)-1].