Python删除列表中重复元素的七种方法举例
作者:十九1919 发布时间:2021-08-16 06:10:15
标签:Python,列表,重复元素
前言
嗨嗨,大家晚上好 ~ 又来给你们分享小妙招啦
在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遍历的还是之前的索引长度,会导致索引超过范围而报错
通过遍历创建的切片来删除原列表
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)
通过递归函数删除
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)
来源:https://blog.csdn.net/aliYz/article/details/128871052


猜你喜欢
- 本节内容学习帮助大家梳理神经网络训练的架构。一般我们训练神经网络有以下步骤:导入库设置训练参数的初始值导入数据集并制作数据集定义神经网络架构
- 前言这篇文章主要给大家总结了关于学习Python的新手们容易犯的几个错误,一共四个易犯错误,下面来看看详细的介绍吧。一、i+=1 不等于++
- 之前捣鼓树莓派时,要求做一个番茄钟,但最后就只是搞成一个与树莓派没啥关系的py程序,虽然简陋,但就此记录一下自学的成果。程序实现番茄工作法:
- 10个杀手级应用的Python自动化脚本重复的任务总是耗费时间和枯燥的。想象一下,逐一裁剪100张照片,或者做诸如Fetching APIs
- 利用二进制反格雷码(bynary reflected Gray code)的方式生成n个元素的全组合,Cn1+Cn2+...+Cnn,如在利
- 第一节:WAP的潜能 这些日子,我们常听到WAP技术,一种手机上网的技术。从技术上讲,移动电话不可能和PC来竞争,移动电话的屏幕只能容下很少
- 看代码吧~predict = output.argmax(dim = 1)confusion_matrix =torch.zeros(2,2
- 前言通常我们在一个站站点进行采集的时候,如果是小站的话 我们使用scrapy本身就可以满足。但是如果在面对一些比较大型的站点的时候,单个sc
- 对于大多数数据科学家而言,线性回归方法是他们进行统计学建模和预测分析任务的起点。这种方法已经存在了 200 多年,并得到了广泛研究,但仍然是
- 1. IO多路复用O多路复用技术是使用一个可以同时监视多个IO阻塞的中间人去监视这些不同的IO对象,这些被监视的任何一个或多个IO对象有消息
- 一般情况是数据文件没有在当前路径,那么它是无法读取数据的。另外,如果路径名包含中文它也是无法读取的。(1)可以选择:import osos.
- 1.文件的写入和读取#!/usr/bin/python # -*- coding: utf-8 -*- # Filename: using_
- Pandas DataFrame 取一行数据会得到Series的方法如题,想要取如下dataframe的一行数据,以为得到的还是datafr
- 一:绑定方法:其特点是调用方本身自动作为第一个参数传入1.绑定到对象的方法:调用方是一个对象,该对象自动传入2.方法绑定到类:调用方是类,类
- 最基本的MMM安装必须至少需要2个数据库服务器和一个监控服务器下面要配置的MySQL Cluster环境包含四台数据库服务器和一台监控服务器
- 描述符(descriptor)是实现了__get__、__set__、__del__方法的类,进一步可以细分为两类:数据描述符:实现了__g
- 一、关闭数据库[oracle@RHEL5]$sqlplus / as sysdba SQL>shutdown immediate; 二
- python2和python3实现在图片上加汉字,最主要的区别还是内部编码方式不一样导致的,在代码上表现为些许的差别。理解了内部编码原理也就
- 能够为数据库数据提供的最简单的用户界面之一就是窗体,窗体可以一次性呈现出来自同一记录的各个域。本文通过python3+pyqt5改写实现了p
- 一、引言 背景我们在做系统时,很多时候是处理实时的任务,请求来了马上就处理,然后立刻给用户以反馈。但有时也会遇到非实时的任务,比如确定的时间