使用python删除列表中的重复条目

时间:2012-03-01 20:51:33

标签: python list unique duplicate-removal

我有一个大文件,其中包含在python中打开的条目:

 fh_in=open('/xzy/abc', 'r') 
 parsed_in=csv.reader(fh_in, delimiter=',')
 for element in parsed_in:
  print(element)

结果:

['ABC','chr9','3468582','NAME1','UGA','GGU']

['DEF','chr9','14855289',NAME19','UCG','GUC']

['TTC','chr9','793946','NAME178','CAG','GUC']

['ABC','chr9','3468582','NAME272','UGT','GCU']

我必须只提取唯一条目并删除co​​l1,col2和col3中具有相同值的条目。就像在这种情况下,基于col1,col2和col3,最后一行与第1行相同。

我尝试了两种方法但失败了:

方法1:

outlist=[]

for element in parsed_in:     
  if element[0:3] not in outlist[0:3]:
    outlist.append(element)

方法2:

outlist=[]
parsed_list=list(parsed_in)
for element in range(0,len(parsed_list)):
  if parsed_list[element] not in parsed_list[element+1:]:
    outlist.append(parsed_list[element])

这两个都返回所有条目,而不是基于前3列的唯一条目。

请建议我这样做的方法

AK

2 个答案:

答案 0 :(得分:3)

你可能想要在添加时使用O(1)查找来保存自己对元素的完整扫描,就像Caol Acain所说,集合是一种很好的方法。

你想要做的是:

outlist=[]
added_keys = set()

for row in parsed_in:
    # We use tuples because they are hashable
    lookup = tuple(row[:3])    
    if lookup not in added_keys:
        outlist.append(row)
        added_keys.add(lookup)

您可以使用将字符串映射到行的字典,但是这会有一个警告,即您不会保留输入的顺序,因此使用列表和键集可以保持顺序为-file。

答案 1 :(得分:0)