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)

上面的代码实现了内容去重,并记录了去重前后的数量,以及所花时间;

原创内容,如需转载,请注明出处;

本文地址: https://www.perfcode.com/p/1120.html

分类: 计算机技术
推荐阅读:
OpenSSL1.x和OpenSSL3.x的区别 OpenSSL 1.x和OpenSSL 3.x是两个不同版本的OpenSSL库,其中有很多重要的区别:
MySQL ABS() 绝对值函数 ABS(x) 函数返回x的绝对值,如果x为NULL则返回NULL;
Python memoryview()函数 memoryview() 函数是一个内置函数,它返回一个memoryview对象,该对象可以用于在 Python 中访问二进制数据。
Golang实现字符串的MD5加密 本文将使用 golang 自带的 crypto/md5 库实现MD5的字符串加密;
Rust程序获取命令行参数 本文将在Rust语言中使用标准库std::env中的args()函数获取命令行参数;标准库std::env中有一个args()函数,它将返回在命令行中传递的参数;
SSH证书登录提示WARNING: UNPROTECTED PRIVATE KEY FILE解决方法 使用SSH登录服务器时,出现 WARNING: UNPROTECTED PRIVATE KEY FILE! 提示,其原因是密钥文件权限太开放,SSH要求密钥文件不能被其他用户房访问;