首页 > 编程语言 >python中如何去重

python中如何去重

时间:2023-03-10 12:13:06浏览次数:56  
标签:set python list1 list 列表 如何 print list2

一、列表中去重

一、使用for循环实现列表去重

此方法去重后,原顺序保持不变。

# for循环实现列表去重
 
list1 = ['a', 'b', 1, 3, 9, 9, 'a']
 
list2 = []
 
for l1 in list1:
 
    if l1 not in list2:
 
        list2.append(l1)
 
print(list2)
# 结果:[‘a’, ‘b’, 1, 3, 9]

 

二、使用列表推导式去重

此方法去重后,原顺序保持不变。

# 使用列表推导式去重
 
list1 = ['a', 'b', 1, 3, 9, 9, 'a']
 
res = []
 
[res.append(i) for i in list1 if i not in res]
 
print(res)

# 结果:[‘a’, ‘b’, 1, 3, 9]

 

三、使用集合转换函数set()实现列表去重

原理:同一个集合的元素之间是不允许重复的

# set()列表去重
 
list1 = ['a', 'b', 1, 3, 9, 9, 'a']
 
list2 = list(set(list1))
 
print(list2)
# 结果:[1, 3, 9, ‘b’, ‘a’]

问题:使用set()函数去重后,会自动排序,则原列表的顺序会发生改变

解决办法有2种:
第一种方法,使用sort()方法

# # 第一种方法,sort()
 
list1 = ['a', 'b', 1, 3, 9, 9, 'a']
 
list2 = list(set(list1))
 
list2.sort(key=list1.index)
 
print(list2)
# 结果:[‘a’, ‘b’, 1, 3, 9]

注:sort()方法没有返回值,对列表元素进行原地排序
第二种方法,使用sorted()函数

# 第二种方法,sored()
 
list1 = ['a', 'b', 1, 3, 9, 9, 'a']
 
list2 = sorted(list(set(list1)), key=list1.index)
 
print(list2)
# 结果:[‘a’, ‘b’, 1, 3, 9]

注:python内置函数sorted()函数返回新的列表,并不对原列表做任何修改

 

四、使用新建字典方式实现列表去重

原理:字典的"键"是不允许重复的
此方法去重后,原来顺序保持不变。

# 使用新建字典实现列表去重
 
list1 = ['a', 'b', 1, 3, 9, 9, 'a']
 
dic = {}
 
dic = dic.fromkeys(list1).keys()
 
print(list(dic)) 结果:[‘a’, ‘b’, 1, 3, 9]

 

五、删除列表中存在重复的数据

上面的4种去重方法,都是保留一个,删除其他
下面这种方法则是,只要存在重复,一个都不保留

# 删除存在重复的值,不保留
 
list1 = ['a', 'b', 1, 3, 9, 9, 'a']
 
list2 = [i for i in list1 if list1.count(i) == 1]
 
print(list2)
# 结果:[‘b’, 1, 3]

 

二、列表中套字典去重

from functools import reduce #导入排序模块
def list_dict_duplicate_removal():
    data_list = [{"a": "123", "b": "321"}, {"a": "123", "b": "321"}, {"b": "321", "a": "123"}]
    run_function = lambda x, y: x if y in x else x + [y]
    return reduce(run_function, [[], ] + data_list)
 
 
if __name__ == '__main__':
    print list_dict_duplicate_removal()
# [{'a': '123', 'b': '321'}]

 

标签:set,python,list1,list,列表,如何,print,list2
From: https://www.cnblogs.com/shaoyishi/p/17202945.html

相关文章

  • 使用Python实现单例模式
    在使用类名()创建对象时,python解释器首先会调用__new__()方法为对象分配内存,然后再调用__init__()方法进行初始化: 其中__new__()是object基类提供的内置静态方......
  • 如何在NET 6.0使用结构化的日志系统
     在我们的系统里面,有一项技术是必须使用的,那就是日志记录。我们在调试系统或者跟踪系统运行情况,都可以通过日志了解具体的情况。在项目开发中,我们有可能使用系统本身所带......
  • Python中的十进制、八进制与十六进制
    在计算机中,通常使用十六进制表示内存地址:在python中使用print输出对象变量,默认情况下,能够输出这个变量引用的对象是由哪一个类创建的对象,以及内存中的地址(使用的十六进制)......
  • OpenHarmony应用开发技巧 - 如何安装ServiceExtensionAbility
    概述文档环境开发环境:Windows11DevEcoStudio版本:DevEcoStudio3.1Beta1(3.1.0.200)SDK版本:3.2.10.7(OpenHarmony3.2Beta5FullSDK)应用模型:Stage开发板型......
  • 国外SEO升级攻略:如何应对搜索引擎算法变化?
    搜索引擎优化(SEO)是一个动态的领域,搜索引擎的算法经常会发生变化,这意味着SEO专业人员需要保持更新的技术知识和策略,以适应变化并提高网站的排名。以下是一些应对搜索引擎算法......
  • OpenHarmony应用开发技巧 - 如何获取证书指纹
    概述文档环境开发环境:Windows11DevEcoStudio版本:DevEcoStudio3.1Beta1(3.1.0.200)SDK版本:3.2.10.7(OpenHarmony3.2Beta5FullSDK)应用模型:Stage开发板型号:DAYU2......
  • 30天帮你一步步学会Python的开源项目
    最近发现一个不错的免费开源学习项目:30天学会Python如果您最近有学习Python的打算,不妨看看这个是否适合你?项目地址:https://github.com/Asabeneh/30-Days-Of-Python博客......
  • Python中的比较
    在python中使用比较时,会使用到"=="和身份运算符 身份运算符:运算符描述实例isis是判断两个标识符是不是引用的同一个对象xisy等价于id(x)==id(y)......
  • 如何规划并实施软件测试?
    测试计划是在对需求进行充分的理解后,将具体的测试对象、测试依赖的前提条件、测试目的、测试情景等基本信息确定下来,指导后续测试工作的开展。在此基础上,对软件测试所......
  • 走向必然王国:如何有把握地构建 GStreamer 管道?
    本文转载自许野平的博客版权声明:本文为博主原创文章,遵循CC4.0BY-SA版权协议,转载请附上原文出处链接和本声明。GStreamer是一款非常优秀的媒体流构建工具。由于......