在python中有效地向元素添加元素

时间:2015-12-19 23:32:41

标签: list python-2.7

我正在遍历超过三百万个项目的列表,并为它们分配整数值。对于组织,我创建了一个字典,其键是整数,值是具有该分数的项目列表。先验,我知道有多少项会有一定的分数,所以我使用+运算符追加到列表中,如下所示:

for e in xs:
   myDict[val(e)] = myDict.get(val,[]) + [e]

我的问题是:

  1. 有更清洁的方法吗?
  2. +操作的时间复杂度是多少?它是创建一个全新的列表,复制原始列表中的元素,并将它们添加到?
  3. 如果我在集合中添加元素怎么办?

1 个答案:

答案 0 :(得分:3)

使用append

for e in xs:
   myDict.setdefault(val(e), []).append(e)

这样可以避免每次都建立一个新列表。操作list1 + list2需要在每次迭代中构建新列表,从而分配内存。 append效率更高,因为列表最后是预先分配的内存。例如,构建一个从空列表开始追加到包含1000万个条目的列表的列表需要多于100个内存分配。

如果密钥存在,setdefault字典方法将返回相应的值。如果密钥不在字典中,则返回默认值。在这种情况下,默认值是列表。由于列表的可变性,我们可以在每个后续迭代中附加到第一个和部分填充列表中的空列表。

使用setdefault()的替代方法是collections.defaultdict。做一些分析,找出哪一个更快。