我应该什么时候使用字典、列表或集合?

是否有更适合每种数据类型的场景?

推荐答案

list保持秩序,dictset不保持秩序:因此,当你关心秩序时,你必须使用list(当然,如果你 Select 的容器仅限于这三个;-).

dict将每个键与一个值相关联,而listset只包含值:显然,这是非常不同的用例.

set要求项是Hasable,而list不是:如果您有不可Hasable的项,则不能使用set,而必须使用list.

set禁止重复,list禁止:这也是一个关键的区别.(在collections.Counter中可以找到一个"multiset",它将重复项映射到多次出现的项的不同计数中——如果出于某种奇怪的原因无法导入collections,您可以将一个构建为dict,或者在2.7之前的Python中,将项作为键,并将相关值作为计数).

判断set(或dict,对于键)中的值的成员身份非常快(大约需要一个恒定的短时间),而在列表中,在平均和最坏情况下,它所需的时间与列表的长度成正比.所以,如果你有可放的物品,不管是订单还是重复,想要快速的会员判断,setlist要好.

Python相关问答推荐

将列中的滚动值集转换为单元格中的单个值

修剪Python框架中的尾随NaN值

两极:滚动组,起始指数由不同列设置

为什么使用SciPy中的Distance. cos函数比直接执行其Python代码更快?

有什么方法可以修复奇怪的y轴Python matplotlib图吗?

Python:MultiIndex Dataframe到类似json的字典列表

具有多个组的条形图的不同y标度

如何使用Tkinter创建两个高度相同的框架(顶部和底部)?

如何使用上下文管理器创建类的实例?

如何在Python中使用时区夏令时获取任何给定本地时间的纪元值?

LAB中的增强数组

优化在numpy数组中非零值周围创建缓冲区的函数的性能

点到面的Y距离

如何从pandas的rame类继承并使用filepath实例化

Python—从np.array中 Select 复杂的列子集

合并帧,但不按合并键排序

为什么np. exp(1000)给出溢出警告,而np. exp(—100000)没有给出下溢警告?

为什么if2/if3会提供两种不同的输出?

如何杀死一个进程,我的Python可执行文件以sudo启动?

在Admin中显示从ManyToMany通过模型的筛选结果