什么时候应该使用字典、列表或集合?
是否存在更适合每种数据类型的场景?
什么时候应该使用字典、列表或集合?
是否存在更适合每种数据类型的场景?
当前回答
与列表、字典和集合相结合,还有另一个有趣的python对象OrderedDicts。
有序字典就像普通字典一样,但是它们会记住条目插入的顺序。在有序字典上迭代时,项将按照键第一次添加的顺序返回。
OrderedDicts在需要保留键的顺序时可能很有用,例如处理文档:通常需要文档中所有术语的向量表示。因此,使用OrderedDicts,您可以有效地验证一个项之前是否已读取,添加项,提取项,在所有操作之后,您可以提取它们的有序向量表示。
其他回答
在使用它们的时候,我为它们的方法做了一个详尽的备忘单,供你参考:
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'}}
当您有一组映射到值的唯一键时,请使用字典。 如果你有一个有序的项目集合,可以使用列表。 使用集合存储一组无序的项。
就OP问的问题而言,可能跑题了-
List:有序、可变对象的不可分解集合。 元组:有序的、不可变对象的可哈希集合,如 列表。 Set:一个不可哈希的无序、可变和不同的集合 对象。 Frozenset:无序、不可变和的可哈希集合 不同的对象。 字典:可变对象的不可哈希的无序集合 将哈希值映射到任意值。
要从视觉上比较它们,一目了然,请看图-
字典:python字典就像一个哈希表,以键作为索引,对象作为值。
列表:列表用于保存数组中的对象,并根据该对象在数组中的位置进行索引。
Set: Set是一个带有函数的集合,这些函数可以判断一个对象是否存在于集合中。
当您需要唯一元素的无序集合时,请使用set。(例如,当您需要文档中使用的所有单词的集合时)。
当你想收集一个不可变的有序元素列表时,使用元组。(例如,当您希望将(name, phone_number)对用作集合中的元素时,您将需要元组而不是列表,因为集合要求元素是不可变的)。
当您想收集一个可变的有序元素列表时,请使用列表。(例如,当您想要将新的电话号码追加到列表:[number1, number2,…])。
当您需要从键映射到值时,请使用字典。(例如,当你想要一个将名字映射到电话号码的电话簿:{'John Smith': '555-1212'})。注意字典中的键是无序的。(如果你遍历字典(电话簿),键(名字)可能以任何顺序出现)。