Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用python删除列表中的重复项_Python_List_Unique_Duplicate Removal - Fatal编程技术网

使用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'

我有一个大文件,其中的条目在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']

我必须只提取唯一的条目,并删除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.