Python中移除List重复项的五种方法

作者:卓晴 时间:2021-12-11 20:15:38 

 本文列些处几种去除在Python 列表中(list)可能存在的重复项,这在很多应用程序中都会遇到的需求,作为程序员最好了解其中的几种方法 以备在用到时能够写出有效的程序。

方法1:朴素方法

这种方式是在遍历整个list的基础上,将第一个出现的元素添加在新的列表中。

示例代码:


# Python 3 code to demonstrate
# removing duplicated from list
# using naive methods

# initializing list
test_list = [1, 3, 5, 6, 3, 5, 6, 1]
print ("The original list is : " +  str(test_list))

# using naive method
# to remove duplicated
# from list
res = []
for i in test_list:
   if i not in res:
       res.append(i)

# printing list after removal
print ("The list after removing duplicates : " + str(res))

→ 输出结果:
The original list is : [1, 3, 5, 6, 3, 5, 6, 1]
The list after removing duplicates : [1, 3, 5, 6]

方法2:列表解析式

这种方式实际上是第一种方法的简化版,它利用列表解析式,使用一行代码就可以替代上面的循环方式。

示例代码:


# Python 3 code to demonstrate
# removing duplicated from list
# using list comprehension

# initializing list
test_list = [1, 3, 5, 6, 3, 5, 6, 1]
print ("The original list is : " +  str(test_list))

# using list comprehension
# to remove duplicated
# from list
res = []
[res.append(x) for x in test_list if x not in res]

# printing list after removal
print ("The list after removing duplicates : " + str(res))

→ 输出结果:
The original list is : [1, 3, 5, 6, 3, 5, 6, 1]
The list after removing duplicates : [1, 3, 5, 6]

方法3:使用set()

这种方式是最流行的方法来去除列表中的重复元素。但该方法的最大的一个缺点就是使用过后列表中元素的顺序不再继续保持与原来一致了。

示例代码:


# Python 3 code to demonstrate
# removing duplicated from list
# using set()

# initializing list
test_list = [1, 5, 3, 6, 3, 5, 6, 1]
print ("The original list is : " +  str(test_list))

# using set()
# to remove duplicated
# from list
test_list = list(set(test_list))

# printing list after removal
# distorted ordering
print ("The list after removing duplicates : " + str(test_list))

→ 输出结果:
The original list is : [1, 5, 3, 6, 3, 5, 6, 1]
The list after removing duplicates : [1, 3, 5, 6]

方法4:利用列表解析式 + enumerate()

该方法是在列表解析式的基础上利用枚举来去除重复元素。通过检查元素是否已经在列表中存在从而将其略过。这种方法可以保持列表中的元素顺序不会改变。

示例代码:


# Python 3 code to demonstrate
# removing duplicated from list
# using list comprehension + enumerate()

# initializing list
test_list = [1, 5, 3, 6, 3, 5, 6, 1]
print ("The original list is : " +  str(test_list))

# using list comprehension + enumerate()
# to remove duplicated
# from list
res = [i for n, i in enumerate(test_list) if i not in test_list[:n]]

# printing list after removal
print ("The list after removing duplicates : " + str(res))

→ 输出结果:
The original list is : [1, 5, 3, 6, 3, 5, 6, 1]
The list after removing duplicates : [1, 5, 3, 6]

方法5:利用collections.OrderedDict.fromkeys()

这是完成特殊任务中最快的方法。它先是将列表中的重复项移除并返回一个字典,最后转换成列表。这种方法对于字符串也可以进行处理。

示例代码:


# Python 3 code to demonstrate
# removing duplicated from list
# using collections.OrderedDict.fromkeys()
from collections import OrderedDict

# initializing list
test_list = [1, 5, 3, 6, 3, 5, 6, 1]
print ("The original list is : " +  str(test_list))

# using collections.OrderedDict.fromkeys()
# to remove duplicated
# from list
res = list(OrderedDict.fromkeys(test_list))

# printing list after removal
print ("The list after removing duplicates : " + str(res))

→ 输出结果:
The original list is : [1, 5, 3, 6, 3, 5, 6, 1]
The list after removing duplicates : [1, 5, 3, 6]

方法6:处理嵌套列表中的重复元素

对于多维列表(列表嵌套)中的重复元素去除。这里假设列表中元素(也是列表)它们具有相同的元素(但不一定顺序相同)都被当做重复元素。那么下面使用 set() + sorted() 方法来完成任务。

 示例代码:


# Python3 code to demonstrate
# removing duplicate sublist
# using set() + sorted()

# initializing list
test_list = [[1, 0, -1], [-1, 0, 1], [-1, 0, 1],
                          [1, 2, 3], [3, 4, 1]]

# printing original list
print("The original list : " + str(test_list))

# using set() + sorted()
# removing duplicate sublist
res = list(set(tuple(sorted(sub)) for sub in test_list))

# print result
print("The list after duplicate removal : " + str(res))

→ 输出结果:
The original list : [[1, 0, -1], [-1, 0, 1], [-1, 0, 1], [1, 2, 3], [3, 4, 1]]
The list after duplicate removal : [(-1, 0, 1), (1, 3, 4), (1, 2, 3)]

也可以利用 set() + map() + sorted()

 示例代码:


# Python3 code to demonstrate
# removing duplicate sublist
# using set() + map() + sorted()

# initializing list
test_list = [[1, 0, -1], [-1, 0, 1], [-1, 0, 1],
                          [1, 2, 3], [3, 4, 1]]

# printing original list
print("The original list : " + str(test_list))

# using set() + map() + sorted()
# removing duplicate sublist
res = list(set(map(lambda i: tuple(sorted(i)), test_list)))

# print result
print("The list after duplicate removal : " + str(res))

→ 输出结果:
The original list : [[1, 0, -1], [-1, 0, 1], [-1, 0, 1], [1, 2, 3], [3, 4, 1]]
The list after duplicate removal : [(-1, 0, 1), (1, 3, 4), (1, 2, 3)]

来源:https://blog.csdn.net/zhuoqingjoking97298/article/details/116946704

标签:Python,移除,List,重复项
0
投稿

猜你喜欢

  • python 七种邮件内容发送方法实例

    2022-01-13 21:06:38
  • DjangoRestFramework 使用 simpleJWT 登陆认证完整记录

    2021-03-29 18:34:12
  • ASP3.0中的流控制能力

    2008-10-19 17:41:00
  • 使用sysbench来测试MySQL性能的详细教程

    2024-01-14 14:33:54
  • Python SSL证书验证问题解决方案

    2022-11-06 13:54:35
  • 基于Arcgis for javascript实现百度地图ABCD marker的效果

    2024-04-23 09:22:22
  • CSS教程:简单理解em

    2008-07-03 12:44:00
  • 利用python-pypcap抓取带VLAN标签的数据包方法

    2021-03-15 04:46:20
  • python和pygame实现简单俄罗斯方块游戏

    2022-10-04 20:00:49
  • uber go zap 日志框架支持异步日志输出

    2024-04-25 15:27:49
  • 学习Python需要哪些工具

    2023-06-20 17:48:40
  • Keras中的两种模型:Sequential和Model用法

    2021-10-16 07:04:32
  • Python如何通过变量ID得到变量的值

    2023-01-22 22:35:56
  • 源码解析gtoken替换jwt实现sso登录

    2024-04-30 09:59:54
  • Flask实现图片的上传、下载及展示示例代码

    2023-07-14 20:46:17
  • 利用xslt对xml进行缩进格式化处理

    2008-09-04 10:34:00
  • Pyqt助手安装PyQt5帮助文档过程图解

    2021-01-31 00:34:06
  • 对numpy和pandas中数组的合并和拆分详解

    2021-04-23 22:51:50
  • 得到自增列的下一个会插入的id

    2024-01-20 17:32:48
  • 如何查看python中安装库的文件位置

    2021-04-17 04:09:31
  • asp之家 网络编程 m.aspxhome.com