我有一个大文件,其中包含在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
答案 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)