Why doesn#39;t list have safe quot;getquot; method like dictionary?(为什么列表没有安全的“get?像字典一样的方法?)
问题描述
为什么列表没有像字典一样的安全get"方法?
<预><代码>>>>d = {'a':'b'}>>>d['a']'b'>>>d['c']键错误:'c'>>>d.get('c', '失败')'失败'>>>l = [1]>>>l[10]IndexError:列表索引超出范围最终它可能没有安全的 .get 方法,因为 dict 是一个关联集合(值与名称相关联)在不抛出异常的情况下检查键是否存在(并返回其值)效率低下,而避免异常访问列表元素(如 len 方法非常快)..get 方法允许您查询与名称关联的值,而不是直接访问字典中的第 37 项(这更像您对列表的要求).
当然,你可以自己轻松实现:
def safe_list_get (l, idx, default):尝试:返回 l[idx]除了索引错误:返回默认值您甚至可以将它添加到 __main__ 中的 __builtins__.list 构造函数中,但这将是一个不太普遍的更改,因为大多数代码不使用它.如果您只是想将它与由您自己的代码创建的列表一起使用,您可以简单地继承 list 并添加 get 方法.
Why doesn't list have a safe "get" method like dictionary?
>>> 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
Ultimately it probably doesn't have a safe .get method because a dict is an associative collection (values are associated with names) where it is inefficient to check if a key is present (and return its value) without throwing an exception, while it is super trivial to avoid exceptions accessing list elements (as the len method is very fast). The .get method allows you to query the value associated with a name, not directly access the 37th item in the dictionary (which would be more like what you're asking of your list).
Of course, you can easily implement this yourself:
def safe_list_get (l, idx, default):
try:
return l[idx]
except IndexError:
return default
You could even monkeypatch it onto the __builtins__.list constructor in __main__, but that would be a less pervasive change since most code doesn't use it. If you just wanted to use this with lists created by your own code you could simply subclass list and add the get method.
这篇关于为什么列表没有安全的“get"?像字典一样的方法?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:为什么列表没有安全的“get"?像字典一样的方
基础教程推荐
- Python,确定字符串是否应转换为 Int 或 Float 2022-01-01
- kivy 应用程序中的一个简单网页作为小部件 2022-01-01
- 究竟什么是“容器"?在蟒蛇?(以及所有的 python 容器类型是什么?) 2022-01-01
- Kivy 使用 opencv.调整图像大小 2022-01-01
- matplotlib 设置 yaxis 标签大小 2022-01-01
- 在 Python 中将货币解析为数字 2022-01-01
- 在 Django Admin 中使用内联 OneToOneField 2022-01-01
- 比较两个文本文件以找出差异并将它们输出到新的文本文件 2022-01-01
- Python 中是否有任何支持将长字符串转储为块文字或折叠块的 yaml 库? 2022-01-01
- 对多索引数据帧的列进行排序 2022-01-01
