2014-05-20 31 views
0

我遇到了一些包含一些重复ID的csv数据源的问题。但最终的结果应该只有一次ID。因此,我们决定只采取我们所看到的第一个例子,而忽略其他任何情况。保留一个列表,以防止在Python中重复效率

目前我的代码是升技这样的:

id_list = list() 
for item in datasource: 
    if item[0] not in id_list: 
     #process 
     id_list.append(item[0]) 

的问题是,当名单不断增加,性能下降。我想知道是否有更有效的方式来跟踪已处理的ID?

回答

5

使用set对象,集保证没有重复,并提供快速的会员资格测试。您可以使用set这样

id_list = set() 
for item in datasource: 
    if item[0] not in id_list: 
     # process 
     id_list.add(item[0]) 

这将是更好的,因为在set对象的查找会在constant time发生,而不是在linear time lookup in lists

0

除了使用列表,您可以使用由ID排序的二叉搜索树。

1

参考this question,我会建议使用的字典。

特别是,唯一键的情况似乎是适当的。

然后,您可以尝试类似:

if key not in dict: 
    [insert values in dict] 
+0

但这种方法的问题是,我们不能维持秩序,因为它是。我们可能不得不使用'OrderedDict' – thefourtheye

+0

我没有意识到需要排序的结果,因为您已经注意到重复的结果... – Stefan

相关问题