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集