在Python列表中删除重复元素的几种方法,用起来真好用

部署运行你感兴趣的模型镜像

一: 直接遍历列表删除

l1 = [1, 1, 2, 2, 3, 3, 3, 3, 6, 6, 5, 5, 2, 2]

for el in l1:
    if l1.count(el) > 1:
        l1.remove(el)
print(l1)# 会漏删,因为删除一个元素后,后面的元素向前补位,导致紧跟的一个元素被跳过.

二: 通过遍历索引删除

l1 = [1, 1, 2, 2, 3, 3, 3, 3, 6, 6, 5, 5, 2, 2]
for el in range(len(l1)):  # 此时len(l1)已经确定,不会随着l1后面的变化而变化
    if l1.count(l1[el]) > 1:
        l1.remove(l1[el])
print(l1)  # 会报错,因为删除元素后导致l1的长度变短了,但是for遍历的还是之前的索引长度,会导致索引超过范围而报错

三: 通过遍历创建的切片来删除原列表

'''
学习中遇到问题没人解答?小编创建了一个Python学习交流QQ群:725638078
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
l1 = [1, 1, 2, 2, 3, 3, 3, 3, 6, 6, 5, 5, 2, 2]
for el in l1[:]:
    if l1.count(el) > 1:
        l1.remove(el) # 没有问题,可以去重,但是无法保留原有的顺序
print(l1)   

四: 用新列表记录需要保留的元素

l1 = [1, 1, 2, 2, 3, 3, 3, 3, 6, 6, 5, 5, 2, 2]
lst = []
for el in l1:
    if lst.count(el) < 1:
        lst.append(el)
print(lst)   # 没有问题,也能保留原有顺序,但是创建了新列表

五: 通过索引倒着删除

l1 = [1, 1, 2, 2, 3, 3, 3, 3, 6, 6, 5, 5, 2, 2]
for el in range(len(l1)-1, -1, -1):
    if l1.count(l1[el]) > 1:
        l1.pop(el)  # 没有问题,且保留原顺序
        # l1.remove(l1[el]) # 没有问题,但是不能保留原有顺序
        # del l1[el] # 这样则会保留原有顺序,小伙伴可以想一想为什么
print(l1)   

六: 通过递归函数删除

'''
学习中遇到问题没人解答?小编创建了一个Python学习交流QQ群:725638078
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
l1 = [1, 1, 2, 2, 3, 3, 3, 3, 6, 6, 5, 5, 2, 2]
def set_lst(lst):
    for el in lst:
        if lst.count(el) > 1:
            lst.remove(el)
            set_lst(lst)    # 每次开辟一个新函数,判断上次被删除了一个元素后的列表
    else:  # 直到最后,列表里的元素都是一个,运行了else
        return lst
print(set_lst(l1))  # 因为是从前面开始删除的,所以不保留原有顺序
'''
[1, 1, 2, 2, 3, 3, 3, 3, 6, 6, 5, 5, 2, 2]
[1, 2, 2, 3, 3, 3, 3, 6, 6, 5, 5, 2, 2]
[1, 2, 3, 3, 3, 3, 6, 6, 5, 5, 2, 2]
[1, 3, 3, 3, 3, 6, 6, 5, 5, 2, 2]
[1, 3, 3, 3, 6, 6, 5, 5, 2, 2]
[1, 3, 3, 6, 6, 5, 5, 2, 2]
[1, 3, 6, 6, 5, 5, 2, 2]
[1, 3, 6, 5, 5, 2, 2]
[1, 3, 6, 5, 2, 2]
[1, 3, 6, 5, 2]   return lst = [1, 3, 6, 5, 2]
'''

七: 毫无疑问set()是最方便的

l1 = [1, 1, 2, 2, 3, 3, 3, 3, 6, 6, 5, 5, 2, 2]
lst = list(set(l1))
print(lst)

结尾给大家推荐一个非常好的学习教程,希望对你学习Python有帮助!

Python基础入门教程推荐

Python爬虫案例教程

您可能感兴趣的与本文相关的镜像

Python3.10

Python3.10

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

Python 有多种删除列表重复元素方法,以下是几种常见的方法: #### 使用 `set()` 方法 `set()` 是 Python 内置的集合类型,集合中的元素具有唯一性。可以将列表转换为集合,再将集合转换回列表,从而去除重复元素。 ```python def remove_duplicates(lst): return list(set(lst)) my_list = [1, 2, 3, 3, 4, 5, 5, 6] print(remove_duplicates(my_list)) ``` 这种方法简单直接,但会改变列表元素的原始顺序 [^1]。 #### 利用集合元素唯一性并保持原顺序 可以使用 `sorted()` 函数,结合 `key` 参数来保持列表元素的原始顺序: ```python def deleteDuplicatedElementFromList3(listA): return sorted(set(listA), key = listA.index) my_list = [1, 2, 3, 3, 4, 5, 5, 6] print(deleteDuplicatedElementFromList3(my_list)) ``` 此方法先将列表转换为集合去除重复元素,再使用 `sorted()` 函数并根据原列表的索引排序,从而保持元素的原始顺序 [^2]。 #### 使用 `for` 循环遍历并判断 通过遍历列表,使用一个新列表存储不重复的元素: ```python test_list = ['张三', '李四', '王五', '张三', '1', '1', '2', '2', '3', '3'] test_list2 = [] for test in test_list: if not test in test_list2: test_list2.append(test) print("结果为:", test_list2) ``` 这种方法会保留列表元素的原始顺序 [^3]。 #### 先排序,对比相邻两个元素 先对列表进行排序,然后从后往前遍历列表,对比相邻两个元素是否相同,相同则删除: ```python test_list = ['张三', '李四', '王五', '张三', '1', '1', '2', '2', '3', '3'] test_list.sort() t = test_list[-1] for i in range(len(test_list) - 2, -1, -1): if t == test_list[i]: test_list.remove(test_list[i]) else: t = test_list[i] print("结果为:", test_list) ``` 使用这种方法时需要先进行排序,并且从后往前遍历列表,以避免删除元素时列表长度改变导致的越界问题 [^3][^4]。
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值