python - 为什么 Python 将元组、列表、集合和字典视为根本不同的东西?

标签 python collections language-design zen-of-python

我喜欢 Python 的原因之一是元组、列表、集合和字典提供的表达能力/减少了编程工作量。一旦你理解了列表推导和一些使用 infor 的基本模式,生活就会变得更好! python 摇滚。

但是,我确实想知道为什么这些构造会被如此不同地对待,以及随着时间的推移这种情况如何变化(变得陌生)。回到 Python 2.x,我可以提出一个论点,它们都只是基本集合类型的变体,而且有些非异国情调的用例要求您将字典转换为列表并返回,这有点令人恼火再次。 (字典不只是具有特定唯一性约束的元组列表吗?列表不只是具有不同类型唯一性约束的集合吗?)。

现在在 3.x 世界中,它变得更加复杂。现在有了命名元组——开始感觉更像是一个特例字典。现在有有序的字典——开始感觉更像一个列表。我刚刚看到了一个订购套装的食谱。我可以想象这种情况一直在发生......唯一列表等呢?

Python 的禅宗说:“应该有一种——最好只有一种——明显的方式来做到这一点”。在我看来,大量的专用集合类型与这条 Python 规则相冲突。

铁杆 Python 达人是怎么想的?

最佳答案

这些数据类型都有不同的用途,在理想情况下,您也许可以将它们更加统一。然而,在现实世界中,我们需要对基本集合进行高效的实现,例如排序会增加运行时损失。

命名元组主要是为了让stat()之类的接口(interface)更好用,在处理SQL行集时也能很好用。

您正在寻找的大统一实际上就在那里,以不同的访问协议(protocol)(getitem、getattr、iter...)的形式存在,这些类型将它们混合并匹配以达到其预期目的。

关于python - 为什么 Python 将元组、列表、集合和字典视为根本不同的东西?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6948383/

相关文章:

python - PyQt4中loadFinished后如何返回值

Java Streams 将列表拆分为子列表,单独处理这些列表并将它们合并回来

c# - 构建唯一 ID 及其计数集合的最佳方式

programming-languages - 在一个项目中使用多种语言

javascript - 为什么 javascript 中的对象字面量会保存不必要的 DOM 引用?

cuda - 如何实现CUDA <<<…>>>()内核启动语法

Python 参数解析 : command-line argument that can be either named or positional

python - DataFrame:如果单元格中存在值,则将值复制到其下方的单元格

Python np.sqrt(x-a)*np.heaviside(x,a)

java - 导入 csv 不使用 opencsv 执行搜索