【发布时间】:2013-04-24 11:11:46
【问题描述】:
我可以将任何列表表示为字典,其键是有效的列表索引,其值是列表的项目。例如,[5, 6, 'a'] 将表示为 {0:5, 1:6, 2:'a'}。
就渐近时间和内存复杂度而言,dict 表示与list 相同。 list 使用较少的内存是一个常数因子。
如果内存不是问题,我是否总是可以使用dict 而不是列表和其他序列(以获得使用任意键的灵活性,并通过减少不同容器的数量来稍微标准化代码用过)?
【问题讨论】:
-
按顺序访问dict项目需要
O(n log n)操作。 -
@PavelAnossov:根据wiki.python.org/moin/TimeComplexity,
dict是元素访问的摊销 O(1)。如果“in order”与“in order of list's indices”的含义相同,则为 O(n):for k in range(len(dict_)): yield dict_[k]。 -
列表是有序的;字典不是。当然,您可以始终使用 collections 包中的 OrderedDict 包
-
@Lattyware:如果我的字典表示一个列表,则通过构造,它的键是整数
0、1、...、len(dict_)-1。所以我知道他们的顺序而不必排序。 (当然,如果我确实使用字典来存储其他键,那就另当别论了。但我只是在谈论用字典替换列表。) -
@max 在 99% 的情况下,可读性远比优化重要,除此之外,如果您需要将这些值传递给一个接受可迭代的函数怎么办? Python 按值进行迭代,因此您可以使用特殊的迭代方法,但没有其他方法可以。 Python 是围绕按值迭代设计的。按索引迭代会产生不太灵活的代码。
标签: python python-3.x containers built-in-types