首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >为什么list没有像字典一样安全的get方法?

为什么list没有像字典一样安全的get方法?
EN

Stack Overflow用户
提问于 2011-02-26 15:18:44
回答 12查看 206.6K关注 0票数 335

为什么list没有像字典一样安全的"get“方法?

代码语言:javascript
复制
>>> d = {'a':'b'}
>>> d['a']
'b'
>>> d['c']
KeyError: 'c'
>>> d.get('c', 'fail')
'fail'

>>> l = [1]
>>> l[10]
IndexError: list index out of range
EN

回答 12

Stack Overflow用户

回答已采纳

发布于 2011-02-26 15:23:05

归根结底,它可能没有安全的.get方法,因为dict是一个关联集合(值与名称相关联),在这种集合中,在不抛出异常的情况下检查键是否存在(并返回它的值)效率很低,而避免访问列表元素的异常非常简单(因为len方法非常快)。.get方法允许您查询与名称相关联的值,而不是直接访问字典中的第37个条目(这更像是您对列表的要求)。

当然,您可以很容易地自己实现此功能:

代码语言:javascript
复制
def safe_list_get (l, idx, default):
  try:
    return l[idx]
  except IndexError:
    return default

您甚至可以将其附加到__main__中的__builtins__.list构造函数中,但这将是一个不太普遍的更改,因为大多数代码都不使用它。如果您只是想将其与您自己的代码创建的列表一起使用,则可以简单地将list子类化并添加get方法。

票数 141
EN

Stack Overflow用户

发布于 2014-04-11 12:56:54

如果您想要第一个元素,比如my_list.get(0),这是可行的

代码语言:javascript
复制
>>> my_list = [1,2,3]
>>> next(iter(my_list), 'fail')
1
>>> my_list = []
>>> next(iter(my_list), 'fail')
'fail'

我知道这不完全是你想要的,但它可能会对其他人有所帮助。

票数 99
EN

Stack Overflow用户

发布于 2011-02-26 15:40:37

可能是因为它对列表语义没有多大意义。但是,您可以通过子类化轻松地创建自己的。

代码语言:javascript
复制
class safelist(list):
    def get(self, index, default=None):
        try:
            return self.__getitem__(index)
        except IndexError:
            return default

def _test():
    l = safelist(range(10))
    print l.get(20, "oops")

if __name__ == "__main__":
    _test()
票数 61
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5125619

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档