python列表去重的5种常见方法实例

 更新时间:2022年06月14日 15:38:54   作者:一位代码  
在Python编程过程中经常会遇到列表去重的问题,下面这篇文章主要给大家介绍了python列表去重的5种常见方法,文中通过实例代码介绍的非常详细,需要的朋友可以参考下

前言

列表去重在python实际运用中,十分常见,也是最基础的重点知识。

以下总结了5种常见的列表去重方法

一、使用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]

以上就是关于列表去重的5种方法,可以根据需求选择对应的方法。

附:Python 二维数组元素去重 np.unique()函数的使用

### 4.2 元素去重
# 4.2.1 一维数组去重
a = np.array([1, 2, 3, 4, 5, 5, 7, 3, 2, 2, 8, 8])
print('去重前:', a)
b = np.unique(a)
print('去重后:', b)
# 4.2.2 二维数组去重
c = np.array(((1, 2), (3, 4), (5, 6), (1, 3), (3, 4), (7, 6)))
print('去重前:', c)
# 方法一:利用set,set是无序不重复集合(推荐)
s = set() #创建空集合
for t in c:
    s.add(tuple(t)) #将数组转为元祖tuple,保证不被修改;再把元祖加入到集合中,完成去重
g = np.array(list(s)) # 将集合转换为列表,最后转为二维数组
print('去重后:', g)
# 合起来写
print('方法一去重后:', np.array(list(set(tuple(t) for t in c))))
# 方法二:转换为虚数
r, i = np.split(c, (1, ), axis=1)
print(r)
print(i)
x = r + i * 1j
# x = c[:, 0] + c[:, 1] * 1j
print('转换成虚数:', x) # 变成一维数组,可使用np.unique()
print('虚数去重后:', np.unique(x))
print(np.unique(x, return_index=True, return_counts=True))
# return_index=True表示返回另一个参数,这个参数也是一个数组,
# array([0, 3, 1, 2, 5]表示去重后的每个元素在去重前的数组中的位置/下标
# return_counts=True表示返回各元素出现的频次
idx = np.unique(x, return_index=True)[1]
# 第[1]列的数组正是return_index=True返回的内容:在c中的位置/下标
print('二维数组去重:\n', c[idx]) #提取这些下标所在的元素
# 结果:
# 去重前: [1 2 3 4 5 5 7 3 2 2 8 8]
# 去重后: [1 2 3 4 5 7 8]
# 去重前: [[1 2]
#  [3 4]
#  [5 6]
#  [1 3]
#  [3 4]
#  [7 6]]
# 去重后: [[1 2]
#  [1 3]
#  [5 6]
#  [7 6]
#  [3 4]]
# 方法一去重后: [[1 2]
#  [1 3]
#  [5 6]
#  [7 6]
#  [3 4]]
# [[1]
#  [3]
#  [5]
#  [1]
#  [3]
#  [7]]
# [[2]
#  [4]
#  [6]
#  [3]
#  [4]
#  [6]]
# 转换成虚数: [[1.+2.j]
#  [3.+4.j]
#  [5.+6.j]
#  [1.+3.j]
#  [3.+4.j]
#  [7.+6.j]]
# 虚数去重后: [1.+2.j 1.+3.j 3.+4.j 5.+6.j 7.+6.j]
# (array([1.+2.j, 1.+3.j, 3.+4.j, 5.+6.j, 7.+6.j]), array([0, 3, 1, 2, 5], dtype=int64), array([1, 1, 2, 1, 1], dtype=int64))
# 二维数组去重:
#  [[1 2]
#  [1 3]
#  [3 4]
#  [5 6]
#  [7 6]]

总结

到此这篇关于python列表去重的5种常见方法的文章就介绍到这了,更多相关python列表去重方法内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Python制作进度条的四种方法总结

    Python制作进度条的四种方法总结

    如果你之前没用过进度条,八成是觉得它会增加不必要的复杂性或者很难维护,其实不然。要加一个进度条其实只需要几行代码,快跟随小编一起学习学习吧
    2022-11-11
  • python占位符输入方式实例

    python占位符输入方式实例

    在本篇文章中小编给大家分享了关于python占位符怎么输入的相关知识点内容,有兴趣的朋友们可以学习下。
    2019-05-05
  • python 随机打乱 图片和对应的标签方法

    python 随机打乱 图片和对应的标签方法

    今天小编就为大家分享一篇python 随机打乱 图片和对应的标签方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-12-12
  • 基于python3监控服务器状态进行邮件报警

    基于python3监控服务器状态进行邮件报警

    这篇文章主要介绍了基于python3监控服务器状态进行邮件报警,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-10-10
  • 15个高级Python技巧提高代码效率更加Pythonic

    15个高级Python技巧提高代码效率更加Pythonic

    Python 是一种多用途、功能强大的编程语言,具有广泛的特性和能力,在本文中,我们将探讨 15 个高级 Python 技巧,它们有助于改善您的开发工作流程,并使您的代码更加高效,更加 Pythonic
    2023-12-12
  • Python之Matplotlib文字与注释的使用方法

    Python之Matplotlib文字与注释的使用方法

    这篇文章主要介绍了Python之Matplotlib文字与注释的使用方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-06-06
  • python爬虫 猫眼电影和电影天堂数据csv和mysql存储过程解析

    python爬虫 猫眼电影和电影天堂数据csv和mysql存储过程解析

    这篇文章主要介绍了python爬虫 猫眼电影和电影天堂数据csv和mysql存储过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-09-09
  • Python的自动化部署模块Fabric的安装及使用指南

    Python的自动化部署模块Fabric的安装及使用指南

    这篇文章主要介绍了Python的自动化部署模块Fabric的安装及使用指南,文中以Debian系统为环境进行了实例演示,需要的朋友可以参考下
    2016-01-01
  • Linux CentOS7下安装python3 的方法

    Linux CentOS7下安装python3 的方法

    在CentOS7下,默认安装的就是python2.7,下面通过本文给大家分享Linux CentOS7下安装python3 的方法,需要的朋友参考下吧
    2018-01-01
  • Python如何利用Har文件进行遍历指定字典替换提交的数据详解

    Python如何利用Har文件进行遍历指定字典替换提交的数据详解

    这篇文章主要给大家介绍了关于Python如何利用Har文件进行遍历指定字典替换提交的数据的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-11-11

最新评论