使用python删除列表中的重复项
我有一个大文件,其中的条目在python中打开,如下所示:使用python删除列表中的重复项,python,list,unique,duplicate-removal,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'
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中具有相同值的条目。就像在本例中一样,最后一行在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将列表转换为集合
您可能希望在添加元素时使用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)
您也可以使用字典将键映射到行,但需要注意的是,您不会保留输入的顺序,因此,拥有列表和密钥集可以让您保持文件中的顺序。可能的重复不是重复,因为他的列表仅基于部分数据而不是整个数据集是唯一的。我也先想到了这一点,但如果您仔细阅读问题,您会发现集合不起作用。列表中的每一项仅在子列表的前三个元素上是唯一的。第一个好答案,比我要发布的要好得多+1.