python是否有一个与字典类似的内置get()for list?

2024-05-19 12:25:52 发布

您现在位置: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)

谢谢!在


Tags: 项目key文档nonedefault列表getindex
3条回答

如果只使用正索引,则要保持快速和简单:

seq, i = [1, 2, 3], 2
plucked = seq[i] if seq[i:] else None

否则:

^{pr2}$

如果例外是常规:

def pluck(seq, index, default=None):
    return seq[index] if seq[index:] and seq[-index-1:] else default

两者都适用于负指数。在

像这样,它也适用于负指数。在

def list_get(lis, index, default = None):
   index = index if index >=0 else len(lis) + index
   return lis[index] if 0 <= index < len(lis) else default

>>> lis = range(10)
>>> list_get(lis, 8, 'foo')
8
>>> list_get(lis, 11, 'foo')
'foo'
>>> list_get(lis, -11, 'foo')
'foo'
>>> list_get(lis, -9, 'foo')
1
>>> list_get(lis, -5, 'foo')
5

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

如果预计故障很少发生,这可能是最快的解决方案:

def pluck(items, index, defval):
    try:
        return items[index]
    except IndexError:
        return defval

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

^{pr2}$

请注意,如果abs(index) <= len(items),即items[-1]等同于items[len(items)-1],那么使用负索引是有效的。在

相关问题 更多 >