在Python中,何时使用字典、列表或集合?
我应该什么时候使用字典、列表或集合 是否有更适合每种数据类型的方案?在Python中,何时使用字典、列表或集合?,python,list,dictionary,data-structures,set,Python,List,Dictionary,Data Structures,Set,我应该什么时候使用字典、列表或集合 是否有更适合每种数据类型的方案? 你只需要一个有序的项目序列吗?去拿清单 您是否只需要知道是否已经获得了特定的值,但不需要排序(并且不需要存储重复项)?使用一套 您是否需要将值与键关联,以便以后可以高效地(按键)查找它们?使用字典 当您需要唯一元素的无序集合时,请使用集合。(例如,当您需要文档中使用的所有单词的集合时) 如果要收集元素的不可变有序列表,请使用元组。(例如,当您希望将(姓名、电话号码)对用作集合中的元素时,您需要一个元组而不是列表,因为集合要求元
- 你只需要一个有序的项目序列吗?去拿清单
- 您是否只需要知道是否已经获得了特定的值,但不需要排序(并且不需要存储重复项)?使用一套
- 您是否需要将值与键关联,以便以后可以高效地(按键)查找它们?使用字典
集合。(例如,当您需要文档中使用的所有单词的集合时)
如果要收集元素的不可变有序列表,请使用元组。(例如,当您希望将(姓名、电话号码)对用作集合中的元素时,您需要一个元组而不是列表,因为集合要求元素是不可变的)
当您想要收集可变的元素有序列表时,请使用列表
。(例如,当您想在列表中添加新电话号码时:[number1,number2,…])
如果需要从键到值的映射,请使用dict
。(例如,当您想要一本将姓名映射到电话号码的电话簿时:{'John Smith':'555-1212'}
)。注意,dict中的键是无序的。(如果您反复阅读dict(电话簿),按键(姓名)可能会以任何顺序出现)。
- 当您有一组映射到值的唯一键时,请使用字典
- 如果您有有序的项目集合,请使用列表
- 使用集合存储无序的项目集合
A
list
保持秩序,dict
和set
不要:当你关心秩序时,你必须使用list
(当然,如果你选择的容器仅限于这三种;-)
dict
将每个键与一个值相关联,而list
和set
只包含值:显然,使用情况非常不同
set
要求项目可散列,list
不要求:因此,如果您有不可散列的项目,则不能使用set
,而必须使用list
set
禁止重复,而list
则不允许重复:这也是一个重要的区别。(可以在集合中找到一个“multiset”,它将重复项映射到多次出现的项的不同计数中。Counter
——如果出于某种奇怪的原因无法导入集合,或者在2.7之前的Python中无法导入集合,则可以将其构建为dict
。defaultdict(int)
,使用项目作为键,关联值作为计数)
检查集合
(或dict
,用于键)中的值的成员身份非常快(大约需要一个恒定的、短的时间),而在列表中,在平均和最坏的情况下,它需要与列表长度成比例的时间。因此,如果您有可散列项,不关心顺序或重复项,并且希望快速检查成员资格,set
优于list
虽然这不包括set
s,但它是对dict
s和list
s的一个很好的解释:
列表就是它们看起来的样子——一个值列表。他们每个人都是
编号,从零开始-第一个编号为零
第二个1、第三个2等。您可以从列表中删除值,然后
在末尾添加新值。你的许多猫的名字
字典与它们的名字相似——字典。
在字典中,你有一个单词的“索引”,每个单词都有一个索引
定义。在python中,这个词被称为“键”,定义
“价值”。字典中的值没有编号-皮重相似
顾名思义,就是一本字典。在字典里,你有
单词的“索引”,以及每个单词的定义。中的值
字典没有编号-它们没有任何特定的顺序,
或者-钥匙做同样的事情。您可以添加、删除和修改
字典中的值。示例:电话簿
列表看起来就是一个价值列表。它们中的每一个都从零开始编号-第一个编号为零,第二个编号为1,第三个编号为2,等等。您可以从列表中删除值,并在末尾添加新值。你的许多猫的名字
元组类似于列表,但不能更改其值。您首先放弃的值是您在程序的其余部分中一直坚持的值。同样,为了便于参考,每个值都从零开始编号。示例:一年中月份的名称
字典与它们的名字类似——字典。在字典中,你有一个单词的“索引”,每个单词都有一个定义。在python中,这个词称为“键”,定义称为“值”。字典中的值没有编号——与它们的名称相似——字典。在字典中,你有一个单词的“索引”,每个单词都有一个定义。在python中,这个词称为“键”,定义称为“值”。字典中的值没有编号-它们也没有任何特定的顺序-键做同样的事情。您可以在字典中添加、删除和修改值。示例:电话簿。使用它们时,我会制作一份详尽的方法备忘单,供您参考:
class ContainerMethods:
def __init__(self):
self.list_methods_11 = {
'Add':{'append','extend','insert'},
'Subtract':{'pop','remove'},
'Sort':{'reverse', 'sort'},
'Search':{'count', 'index'},
'Entire':{'clear','copy'},
}
self.tuple_methods_2 = {'Search':'count','index'}
self.dict_methods_11 = {
'Views':{'keys', 'values', 'items'},
'Add':{'update'},
'Subtract':{'pop', 'popitem',},
'Extract':{'get','setdefault',},
'Entire':{ 'clear', 'copy','fromkeys'},
}
self.set_methods_17 ={
'Add':{['add', 'update'],['difference_update','symmetric_difference_update','intersection_update']},
'Subtract':{'pop', 'remove','discard'},
'Relation':{'isdisjoint', 'issubset', 'issuperset'},
'operation':{'union' 'intersection','difference', 'symmetric_difference'}
'Entire':{'clear', 'copy'}}
结合列表、dict和set,还有另一个有趣的python对象
有序词典与常规词典一样,但它们记住插入项的顺序。当在一个有序字典上迭代时,这些项将按照它们的键第一次添加的顺序返回
订购的