Python-将缺少的元素从一个列表复制到另一个列表

时间:2018-10-26 20:41:31

标签: python list performance copy

我正在寻找更新列表的最有效方法。

我有一个变量self.myGlobalList = []

我还有一个递归函数,每次调用都会生成一个带有坐标的新列表。

在第一次迭代中说,我获得以下列表:

[(1,1), (21,22), (84,6)]

由于self.myGlobalList不包含任何这些坐标,因此我将其附加到该坐标:

for elem in generatedList:
   if elem not in self.myGlobalList:
      self.myGlobalList.append(elem);

然后,在第二次迭代中,我获得一个新生成的列表:

[(1,1), (21,22), (9,18), (71, 89), (13, 21)]

现在,我的代码将再次遍历新生成的列表的每个元素,并检查self.myGlobalList中是否缺少任何元素,如果是,请附加它们。结果应包含新元素:

[(1,1), (21,22), (84,6), (9,18), (71, 89), (13, 21)]

到目前为止,一切正常。

但是,我的列表可以包含500,000多个坐标。在效率方面,这种方法是否足够,您是否可以提出一些建议以对其进行优化?

2 个答案:

答案 0 :(得分:0)

例如,您可以执行以下操作(玩具示例):

iterations = [
    [(1, 1), (21, 22), (84, 6)], [(1, 1), (21, 22), (9, 18), (71, 89), (13, 21)]]

global_set = set()
global_list = []
for iteration in iterations:
    for pair in iteration:
        if pair not in global_set:
            global_list.append(pair)
            global_set.add(pair)

print(global_list)

输出

[(1, 1), (21, 22), (84, 6), (9, 18), (71, 89), (13, 21)]

说明

表达式if pair not in global_setO(1)(即检查元素是否存在需要花费固定的时间),另一方面,if pair not in global_list将花费O(n)进行检查如果存在元素。

进一步

  1. Python https://ctags.io
  2. set

答案 1 :(得分:0)

将每个public class Event { private DateTime _startDate; private DateTime _endDate; private Color _dateColor; } 放入集合中,然后继续在集合上执行public class Event { public EventDates EventDates { get; private set; } } public class EventDates { private DateTime _startDate; private DateTime _endDate; private Color _dateColor; } 。重复的代码应该进入循环。

generated_list

输出:

union