Python列表中多元素删除(移除)的实现
作者:TonyX2 发布时间:2023-12-28 03:45:11
问题背景
a=[1,4,2,1,5,6,9,0]
#删除列表中的元素,其所在的位置为[1,3,7]
del_index=[1,3,7]
tmp=[i for num,i in enumerate(a) if num not in del_index]
print(f"最终结果:{tmp}")
结果:
最终结果:[1, 2, 5, 6, 9]
目的是实现List中的多个元素的移除(单个元素的比较简单,这里不做过多赘述)。而多元素的删除,可以归纳为以下两类:
实现方法
1. 使用枚举法
直接使用枚举,然后判断索引在不在删除索引里面即可。
[i for num,i in enumerate(a) if num not in del_index]
2. python中List的内置方法
使用内置方法remove移除或pop,但是每次只能移除一个。具体的函数差异:
#pop
L.pop([index]) -> item -- remove and return item at index (default last).#(从后往前,有返回值)
#输入为:元素所在的索引
#remove:
L.remove(value) -> None -- remove first occurrence of value.
#(无返回值)
#输入为具体的元素,重复的元素首先移除第一个
若直接使用for循环直接使用上述函数,就会报错!!!比如:
--------------------------------------------------------
IndexError Traceback (most recent call last)
<ipython-input-25-364cdd187e0c> in <module>
4 b=a.copy()
5 for i in del_index:
----> 6 b.remove(b[i])# b.pop(i)
7 print(b)
8IndexError: list index out of range
改进:
(1) pop
b=a.copy()
for num,i in enumerate(del_index):
print(f"{b},被移除的元素:{a[i]}")
b.pop(i-num)
print(f"最终结果:{b}")
结果与枚举法结果一致。
(2) remove
c=a.copy()
for num,i in enumerate(del_index):
print(f"{c},被移除的元素:{a[i]}")
c.remove(c[i-num])#重复元素
print(f"最终结果:{c}")
输出结果:
[1, 4, 2, 1, 5, 6, 9, 0],被移除的元素:4
[1, 2, 1, 5, 6, 9, 0],被移除的元素:1
[2, 1, 5, 6, 9, 0],被移除的元素:0
最终结果:[2, 1, 5, 6, 9]
remove后的结果与上述方法的结果不一致.主要原因是重复值的问题,a[3]=1,a[0]=1,所以在移除元素4后,原列表变成[1, 2, 1, 5, 6, 9, 0].移除元素1时,本应该移除的是4右侧的1,但是由于remove的默认属性,它会选择第一次出现的1进行移除。虽然得到的结果值一样,但是元素的索引与其它方法的结果不一致。
结论
就最终结果而言,枚举法和pop法不受重复值的影响;而remove容易受重复值的影响。
若最终结果不受顺序影响,三者的差异可以忽略不计。
来源:https://www.cnblogs.com/tonyxiao/p/14378007.html


猜你喜欢
- 一:什么是exe?exe是Windows环境中的文件扩展名之一,它是一个可执行文件,虽然扩展程序在一般情况下是隐藏的,但是我们可以通过取消选
- 1、项目背景对于不会PS的小伙伴,抠图是一个难度系数想当高的活儿,某宝照片抠图和证件照换底色均价都是5元RMB,所以今天要介绍的这款神工具,
- 1.string.maketrans设置字符串转换规则表(translation table) allchars = string.make
- 前言使用Python发邮件,是个简单的话题,可是如何可以优雅的轻松的群发邮件,并附加PDF附件,是很多小伙伴的日常工作,却也是很多小白需要费
- 学习目的: 学习ADO.NET用法,并如何用DataRearder读取数据 今天练习数据库的最基本用法,如何打开数据库。首先在网站设置文件w
- Python json 错误xx is not JSON serializable解决办法在使用json的时候经常会遇到xxx
- 上一篇文章中我们介绍了 python 语言的几个特点,并在最后留了一个问题,python 除了上下执行以外有没有其他的执行方式。今天我们就来
- python的使用之所以方便,原因之一就是各种数据类型各样轻松的转换,例如numpy数组和list的相互转换,只需要函数方法的使用就可以处理
- 本文实例讲述了php文件上传类。分享给大家供大家参考,具体如下:/**$file=new class_file($file_array,&q
- WARNING:低技术力自己无聊写的哥特字体是最好看的:示例代码:#!usr/bin/env python3# -*- coding:UTF
- 终于把promise, async, await的区别和联系弄清楚了,看下面代码写法1,2是promise的写法写法6是async和awai
- 看看下面的w3 upload组件例子,很简单: upload.asp<html> <head>
- 写在前面Omi框架可以通过在组件上声明 data-* 把属性传递给子节点。Omi从设计之初,就是往标准的DOM标签的标准传递方式靠齐。比如:
- Python 代码库之Tuple如何append元素tuple不像array给我们提供了append函数,我们可以通过下面的方式添加t=[1
- 1、Numpy ndarray对象numpy ndarray对象是一个n维数组对象,ndarray只能存储一系列相同元素。#一维数组[1,2
- 前言:大家好啊!又是我TUSTer_! python里有自带的库math,cmath,和函数pow来开根号。下边让我带你了解他们
- 本文实例讲述了php设计模式之正面模式。分享给大家供大家参考,具体如下:星际里面的战斗都是在地图上进行的,只要我们可以编辑地图,就可以创造一
- 1.将经常要用到的字段(比如经常要用这些字段来排序,或者用来做搜索),则最好将这些字段设为索引。2.字段的种类尽可能用int 或者tinyi
- 使用python实现文件导入,具体方法如下:文件样例可以自己random这里的temp1根据每一行的分隔符来读入,‘\n'表述回车t
- 在嵌入式、尤其是机器人的python编程中,经常需要实时检测用户的键盘输入来随时控制机器人,这段代码可以帮助我们提取用户输入的字符,并在按下