【发布时间】:2017-10-09 06:23:03
【问题描述】:
我正在编写一个查找重复文件的程序,现在我有一个元组列表
mylist = [(file1, size1, hash1),
(file2, size2, hash2),
...
(fileN, sizeN, hashN)]
我想删除具有唯一哈希的条目,只留下重复项。我正在使用
def dropunique(mylist):
templist = []
while mylist:
mycandidate = mylist.pop()
templist.append([mycandidate])
for myfile in mylist:
if myfile[-1] == mycandidate[-1]:
templist[-1].append(myfile)
mylist.remove(myfile)
for myfile in templist:
if len(myfile) != 1:
mylist.append(myfile)
templist = [item for sublist in mylist for item in sublist]
return templist
在我弹出一个条目的地方,查看是否有其他条目具有相同的散列和组,然后在具有相同散列的列表列表中。然后,我只使用 len > 1 的子列表创建另一个列表,并将结果列表扁平化为一个简单列表。 我的问题是,当我在某些列表上使用“for myfile in mylist:”时从列表中删除一个条目时,它会跳过相同的条目并在后面继续存在。
【问题讨论】:
-
在遍历列表时删除项目类似于在地球构造板块快速移动时跳跃。
-
请不要使用
list作为变量名,因为您会隐藏list类型。例如,替换为my_list。
标签: python algorithm duplicates tuples uniqueidentifier