Python\\如何找出3个文件中的重复元素
Python\\ How to find out duplicate elements in 3 files
我有 3 个文件,我需要找出在不同文件中至少出现两次的重复元素。
最简单的方法是将每个文件读入内存,然后比较结果。
例如,给定两个列表,您可以执行此操作来识别差异(第一个列表中的项目不在第二个列表中)。
list(set(['foo', 'bar']) - set(['bar']))
因此,如果您有三个列表 s1
、s2
和 s3
,您可以:
s1 = ['a', 'b', 'c', 'd']
s2 = ['b', 'c']
s3 = ['c', 'd']
list(set(s1) - set(s2) - set(s3))
// gives us ['a']
现在我们可以将其应用于读取文件。
这个例子做了一些假设:
- 您正在比较文件中的行。如果这不准确,您需要在阅读文件后自己 list/set 做准备
- 你只是想识别唯一的行,如果你想对重复的行做其他事情,你需要相应地修改它。
with open('s1.txt') as f:
s1 = f.readlines()
with open('s2.txt') as f:
s2 = f.readlines()
with open('s3.txt') as f:
s3 = f.readlines()
unique_lines = list(set(s1) - set(s2) - set(s3))
print(unique_lines)
注意:这对于大型 files/datasets 来说并不是特别有效,但对于大多数简单示例来说已经足够了。
更新:根据评论,要找到重复项本身,您可以合并每个集合之间的交集。
>>> s1 = set(['a', 'b', 'c', 'd'])
>>> s2 = set(['x', 'c'])
>>> s3 = set(['z', 'd'])
>>> s1 & s2
{'c'}
>>> s2 & s3
set()
>>> s3 & s1
{'d'}
>>> s1 & s2 | s2 & s3 | s3 & s1
{'d', 'c'}
关于您的数据大小,除非您有特定的低内存配置文件限制,否则请注意执行时可能需要几百 Mb 的内存。这是因为您在内存中拥有所有三个数据集。
我有 3 个文件,我需要找出在不同文件中至少出现两次的重复元素。
最简单的方法是将每个文件读入内存,然后比较结果。
例如,给定两个列表,您可以执行此操作来识别差异(第一个列表中的项目不在第二个列表中)。
list(set(['foo', 'bar']) - set(['bar']))
因此,如果您有三个列表 s1
、s2
和 s3
,您可以:
s1 = ['a', 'b', 'c', 'd']
s2 = ['b', 'c']
s3 = ['c', 'd']
list(set(s1) - set(s2) - set(s3))
// gives us ['a']
现在我们可以将其应用于读取文件。
这个例子做了一些假设: - 您正在比较文件中的行。如果这不准确,您需要在阅读文件后自己 list/set 做准备 - 你只是想识别唯一的行,如果你想对重复的行做其他事情,你需要相应地修改它。
with open('s1.txt') as f:
s1 = f.readlines()
with open('s2.txt') as f:
s2 = f.readlines()
with open('s3.txt') as f:
s3 = f.readlines()
unique_lines = list(set(s1) - set(s2) - set(s3))
print(unique_lines)
注意:这对于大型 files/datasets 来说并不是特别有效,但对于大多数简单示例来说已经足够了。
更新:根据评论,要找到重复项本身,您可以合并每个集合之间的交集。
>>> s1 = set(['a', 'b', 'c', 'd'])
>>> s2 = set(['x', 'c'])
>>> s3 = set(['z', 'd'])
>>> s1 & s2
{'c'}
>>> s2 & s3
set()
>>> s3 & s1
{'d'}
>>> s1 & s2 | s2 & s3 | s3 & s1
{'d', 'c'}
关于您的数据大小,除非您有特定的低内存配置文件限制,否则请注意执行时可能需要几百 Mb 的内存。这是因为您在内存中拥有所有三个数据集。