在Python中,何时使用Dictionary,List或Set?
我应该什么时候使用字典,列表或设置?
是否有更适合每种数据types的场景?
一个list
保持秩序, dict
和set
不:当你关心秩序,因此,你必须使用list
(如果你select的容器限于这三个,当然;-)。
dict
将每个键与一个值相关联,而list
和set
只是包含值:显然,用例非常不同。
set
需要项目是可哈希的, list
不会:如果你有非可哈希项目,因此,你不能使用set
而必须使用list
。
set
禁止重复, list
不:重要的区别。 (可以在collections.Counter
find一个“multiset”,它将重复项目映射到一个不同的项目中,可以在collections.Counter
findcollections.Counter
– 如果出于某种奇怪的原因,您不能导入collections
, ,在2.7之前的Python中,作为collections.defaultdict(int)
,使用项目作为关键字,关联的值作为count)。
在一个set
(或dict
,对于键)中检查一个值的成员资格是非常快的(大约是一个恒定的短时间),而在一个列表中,在平均和最差的情况下,它需要的时间与列表的长度成正比。 所以,如果你有可sorting的项目,不要在意有关订单或重复的任何方式,并希望迅速成员检查, set
比list
。
- 你只需要一个有序的项目序列? 去一个清单。
- 你只需要知道你是否已经有一个特定的价值,但没有订购(你不需要存储重复)? 使用一套。
- 你需要将值与键相关联,所以你可以稍后有效地查找它们(通过键)? 使用字典。
-
如果有一组映射到值的唯一键,请使用字典。
-
如果您有一个有序的项目集合,请使用列表。
-
使用一组来存储一组无序的项目。
当你想要一个无序的唯一元素集合时,使用一个set
。 (例如,当你想要在文档中使用的所有单词的集合)。
当你想收集一个不可变的有序元素列表时,使用一个tuple
。 (例如,当你想要一个(名称,电话号码)对,你希望用作一个集中的元素,你需要一个元组而不是一个列表,因为集合要求元素是不可变的)。
当你想收集一个可变的有序元素列表时,使用一个list
。 (例如,当您想将新电话号码追加到列表中时:[number1,number2,…])。
当你想从键到值的映射时,使用一个dict
。 (例如,当你想要一个把姓名映射到电话号码的电话簿: {'John Smith' : '555-1212'}
)。 注意字典中的键是无序的。 (如果你通过一个字典(电话簿)迭代,键(名字)可能以任何顺序出现)。
虽然这不包括set
,这是一个很好的解释的dict
和list
s:
列表是他们所看到的 – 值的列表。 它们中的每一个都被编号,从零开始 – 第一个编号为零,第二个1,第三个2等。您可以从列表中删除值,并将新值添加到结尾。 例如:你的许多猫的名字。
字典类似于他们的名字所暗示的 – 字典。 在字典中,你有一个“索引”的单词,并为他们每个人的定义。 在Python中,这个词被称为“键”,定义为“值”。 字典中的值不会被编号 – 与他们的名字所暗示的类似 – 字典。 在字典中,你有一个“索引”的单词,并为他们每个人的定义。 字典中的值不会被编号 – 它们也不是以任何特定的顺序 – 关键是做同样的事情。 您可以添加,删除和修改字典中的值。 例如:电话簿。
列表是他们所看到的 – 值的列表。 它们中的每一个都被编号,从零开始 – 第一个编号为零,第二个1,第三个2等。您可以从列表中删除值,并将新值添加到结尾。 例如:你的许多猫的名字。
元组就像列表,但是你不能改变它们的值。 首先给出的值是您在程序的其余部分所坚持的值。 再次,每个值从零开始编号,以便于参考。 例如:一年中的月份名称。
字典类似于他们的名字所暗示的 – 字典。 在字典中,你有一个“索引”的单词,并为他们每个人的定义。 在Python中,这个词被称为“键”,定义为“值”。 字典中的值不会被编号 – 与他们的名字所暗示的类似 – 字典。 在字典中,你有一个“索引”的单词,并为他们每个人的定义。 在Python中,这个词被称为“键”,定义为“值”。 字典中的值不会被编号 – 它们也不是以任何特定的顺序 – 关键是做同样的事情。 您可以添加,删除和修改字典中的值。 例如:电话簿。