Python使用集合实现内容去重
有这么一个场景,某个文件用于记录人名(也可以是URL或者其他的),编辑发现,出现了重复的内容。那么我们如何使用Python来进行去重呢?
如果换做刚学习编程的我,我一定会把所有内容加载到内存,再挨个的进行比对,如果有重复的则删除;那种方法耗时(取决于具体算法),还low。现在可以有一种更好的方法可以实现快速的去重。
Python 集合(set)
集合(set)是一个无序的不重复元素序列。
Python 中使用大括号{}或者set()函数来创建集合。
创建一个空集必须使用set()而不是{},因为{}是用来创建一个空字典。
没有键的{}就是一个集合(set),会自动删除重复的值。
回到本文开头的问题,再利用Python集合的特性;只需要将文件内容读入到表中,然后使用set()函数生成一个集合,再将集合中的内容写回到文件中即可。
实现代码:
import time
while True:
file_name=input('请输入文件路径或文件名:')
try:
with open(file_name) as fp:
domain_lst = fp.readlines()
except:
print('错误的文件路径!!!')
continue
start=time.time()
print('总数:',len(domain_lst))
new_lst=list(set(domain_lst))
print('去重后:',len(new_lst))
print(time.time()-start,'秒')
with open(file_name,'w') as fp:
fp.write(''.join(new_lst))
print('文件保存到:',file_name)
上面的代码实现了内容去重,并记录了去重前后的数量,以及所花时间;