为什么列表没有像字典一样安全的“获取”方法?
>>> 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
最终,它可能没有一个安全的.get
方法,因为adict
是一个关联集合(值与名称相关联),在这种情况下,检查键是否存在(并返回其值)而不抛出异常是非常低效的,而这是非常琐碎的避免异常访问列表元素(因为该len
方法非常快)。该.get
方法允许您查询与名称关联的值,而不是直接访问字典中的第37个项目(这更像是您要查询的列表中的内容)。
当然,您可以自己轻松实现此目的:
def safe_list_get (l, idx, default):
try:
return l[idx]
except IndexError:
return default
您甚至可以在中将其猴子修补到__builtins__.list
构造函数上__main__
,但是由于大多数代码不使用它,因此更改的普及程度较小。如果您只想将此代码与自己的代码创建的列表一起使用,则可以简单地子类化list
并添加get
方法。
和都有构造函数来设置初始容量,但提供以确保如果预期插入大量元素,内部数组已经增加。在某些情况下,也可能发生同样的事情。那么为什么没有确保容量的方法来保持存储桶准备就绪?
问题内容: 来自Java背景,我想知道为什么Scala中没有类似Java 的字段。毕竟,使用size字段,您将能够确定时间的列表大小,那么为什么size字段被删除了? (此问题涉及Scala 2.8及更高版本中的新集合类。此外,我指的是不可变的,而不是可变的。) 问题答案: 不能说size字段已被 删除 ,因为LISP自LISP以来已经存在了50年,这种列表无处不在,并且它们在ML和Haskell
问题内容: 我有一个字典列表,我需要从字典的给定键中获取值的列表(所有字典都具有相同的键)。 例如,我有: 我需要得到1,2,3 当然,我可以通过以下方式获得它: 但是我想找到一种更好的方法。 问题答案: 使用简单的列表推导(如果您确定每个字典都有键): 否则,您需要首先检查是否存在:
rank ▲ ✰ vote url 34 525 50 764 url 怎么样获取一个列表的长度? items = [] items.append("apple") items.append("orange") items.append("banana") # FAKE METHOD:: items.amount() # 返回 3 怎么样做才对? len函数可以用于Python中许多的类型,
问题内容: 我最近与一位同事讨论了Java为什么List接口没有and 方法的原因。 为了实现这样的功能,必须编写一个看起来像这样的包装器: 我不知道所有List的实现,但我假设至少在LinkedList和ArrayList中, 获取最后一个元素和第一个元素 (恒定时间)应该是很简单的。 所以问题是: 是否有一个特定的原因为什么不能为任何List实现提供tail方法? 问题答案: Java Col
问题内容: 我有这样的字典列表: 我想要 最好的方法是什么? 问题答案: 假设每个字典都有一个键,你可以编写(假设你的列表名为l) 如果value可能丢失,可以使用