在Python中何时使用字典、列表或集合?

339 投票
13 回答
229187 浏览
提问于 2025-04-16 02:50

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

有没有什么情况更适合使用这些不同的数据类型呢?

13 个回答

25

当你想要一个不重复的元素集合时,可以使用 set。比如说,当你想要一个文档中所有单词的集合时,就可以用这个。

当你想要一个不可改变的有序元素列表时,可以使用 tuple。比如说,当你想要一个(名字,电话号码)的组合,并且希望把它作为一个元素放到集合里时,就需要用元组,而不是列表,因为集合里的元素必须是不可改变的。

当你想要一个可以改变的有序元素列表时,可以使用 list。比如说,当你想要在一个列表中添加新的电话号码时,就可以用这个列表:[号码1,号码2,...]。

当你想要一个从键到值的映射时,可以使用 dict。比如说,当你想要一个电话本,把名字和电话号码对应起来时,可以用这个:{'John Smith' : '555-1212'}。注意,字典里的键是没有顺序的。如果你遍历一个字典(电话本),键(名字)可能会以任何顺序出现。

211

你是不是只需要一串有顺序的东西?那就用列表吧。

你是不是只想知道某个特定的值有没有存在,但不需要排序(而且不需要存重复的值)?那就用集合。

你是不是需要把值和键关联起来,这样以后可以通过键快速查找?那就用字典。

640

一个 list 是有顺序的,而 dictset 是没有顺序的:当你需要保持顺序时,就必须使用 list(当然,这里假设你只在这三种容器中选择)。

dict 是把每个键和一个值关联起来,而 listset 只是包含值:这三者的用途显然是很不同的。

set 里的项目必须是可哈希的,而 list 则不需要:所以如果你有一些不可哈希的项目,就不能使用 set,而必须使用 list

set 不允许有重复的值,而 list 则可以:这也是一个重要的区别。(“多重集合”可以在 collections.Counter 中找到,它会把重复的项目计入不同的数量。如果因为某种奇怪的原因你不能导入 collections,你也可以用 dict 来构建一个,或者在 Python 2.7 之前用 collections.defaultdict(int),把项目作为键,数量作为值)。

set 中检查一个值是否存在(或者在 dict 中检查键)是非常快的(大约是一个固定的、很短的时间),而在 list 中则需要的时间与列表的长度成正比,尤其是在平均和最坏的情况下。所以,如果你有可哈希的项目,对顺序和重复不在意,并且想要快速检查是否存在,setlist 更好。

撰写回答