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

Remove duplicate entries in list using python

我有一个大文件,在python中打开的条目如下:

1
2
3
4
 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']

我只需要提取唯一的条目,并删除col1、col2和col3中具有相同值的条目。就像在这种情况下,最后一行与第1行在col1、col2和col3的基础上相同。

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

方法1:

1
2
3
4
5
outlist=[]

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

方法2:

1
2
3
4
5
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列的基础上返回所有条目,而不是唯一条目。

请给我一个建议

阿克


您可能想使用O(1)查找来保存添加时元素的完整扫描,正如Caol Acain所说,集是一种很好的方法。

你想做的是:

1
2
3
4
5
6
7
8
9
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)

您也可以使用字典将键映射到行,但这会有一个警告,即您不会保留输入的顺序,因此使用列表和键集可以像文件中一样保留顺序。


将列表转换为集合!

http://docs.python.org/tutorial/datastructures.html集