python 列表删除多个元素

这篇具有很好参考价值的文章主要介绍了python 列表删除多个元素。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一. 删除列表多个元素

问题背景:
删除列表中的元素,其所在的位置为[1,3,7]

a=[1,4,2,1,5,6,9,0]

期望输出结果:

最终结果:[1, 2, 5, 6, 9]
方法1 使用枚举:

直接使用枚举,然后判断索引在不在删除索引里面即可。

[i for num,i in enumerate(a) if num not in del_index]

完整代码:

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}")
2. 使用python中List.pop()方法

使用内置方法remove移除,但是每次只能移除一个:

#pop
L.pop([index]) -> item -- remove and return item at index (default last).#(从后往前,有返回值)
#输入为:元素所在的索引
  1. 若直接使用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.pop(i)# b.pop(i)
      7 print(b)
      8 

IndexError: list index out of range
  1. 改进:
b=a.copy()
for num,i in enumerate(del_index):
    print(f"{b},被移除的元素:{a[i]}")
    b.pop(i-num)
print(f"最终结果:{b}")

结果与枚举法结果一致。

3. 使用python中List.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进行移除。虽然得到的结果值一样,但是元素的索引与其它方法的结果不一致。

4. 注意
  • 就最终结果而言,枚举法和pop法不受重复值的影响;而remove容易受重复值的影响。若最终结果不受顺序影响,三者的差异可以忽略不计。
  • 推荐使用枚举法删除列表多个元素,pop()方法和remove()方法删除列表元素容易出错,不推荐使用,因为删除列表元素后,列表大小会改变,从而导致列表的索引也会改变,从而导致出错。
  • 如果只删除列表一个元素,可以使用列表的pop()和remove()方法。

二. 使用双指针法删除列表多个元素

使用双指针法删除列表多个元素解决方法链接

1. 问题描述:

LeetCode链接
给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。

不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并原地修改输入数组。

元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。

示例 1: 给定 nums = [3,2,2,3], val = 3, 函数应该返回新的长度 2, 并且 nums 中的前两个元素均为 2。 你不需要考虑数组中超出新长度后面的元素。

示例 2: 给定 nums = [0,1,2,2,3,0,4,2], val = 2, 函数应该返回新的长度 5, 并且 nums 中的前五个元素为 0, 1, 3, 0, 4。

2. 解决方法:

双指针法(快慢指针法): 通过一个快指针和慢指针在一个for循环下完成两个for循环的工作
定义快慢指针:

  • 快指针:寻找新数组的元素 ,新数组就是不含有目标元素的数组
  • 慢指针:指向更新 新数组下标的位置
    删除过程如下:
    python列表删除多个指定元素,Python,python,开发语言

注意双指针方法并没有改变元素的相对位置(就地删除列表元素):文章来源地址https://www.toymoban.com/news/detail-783713.html

  • 时间复杂度:O(n)
  • 空间复杂度:O(1)
3. 代码如下:
class Solution:
    def removeElement(self, nums: List[int], val: int) -> int:
        # 快慢指针
        fast = 0  # 快指针
        slow = 0  # 慢指针
        size = len(nums)
        while fast < size:  # 不加等于是因为,a = size 时,nums[a] 会越界
            # slow 用来收集不等于 val 的值,如果 fast 对应值不等于 val,则把它与 slow 替换
            if nums[fast] != val:
                nums[slow] = nums[fast]
                slow += 1
            fast += 1
        return slow

三. 总结

  • 推荐使用枚举法和双指针方法删除列表多个元素,不推荐使用列表的pop()方法和remove()方法,容易出错。
  • 如果只删除列表一个元素,可以使用列表的pop()和remove()方法。

四. 相关链接

  1. Python 列表中多元素的删除(移除)
  2. 使用双指针法删除列表多个元素解决方法链接

到了这里,关于python 列表删除多个元素的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • python 找出list列表中相同元素(指定元素)的所有索引

    有时需要获取 列表 中某一元素的所有索引,而获取列表元素索引的函数 index 只能返回第一个满足条件的元素的索引。 此时我们可以通过两种方式获取其所有索引: 1.将list转为array 对于array对象,可以使用如下方式获取某个元素的所有索引 其中nums_list为原始列表,nums为arr

    2023年04月14日
    浏览(37)
  • Python list列表删除元素(4种方法)

    在 Python列表中删除元素主要分为以下 3 种场景: 根据目标元素所在位置的索引进行删除,可以使用 del 或者 pop() 方法; 根据元素本身的值进行删除,可使用列表(list类型)提供的 remove() 方法; 将列表中所有元素全部删除,可使用列表(list类型)提供的 clear() 方法

    2024年02月02日
    浏览(54)
  • Python 数组和列表:创建、访问、添加和删除数组元素

    Python 没有内置支持数组,但可以使用 Python 列表来代替。 本页将向您展示如何使用列表作为数组,但要在 Python 中使用数组,您需要导入一个库,比如 NumPy 库。数组用于在一个变量中存储多个值: 示例,创建一个包含汽车名称的数组: 数组是一种特殊的变量,可以同时保存

    2024年02月08日
    浏览(40)
  • Python+Selenium实现列表元素的查找定位及删除操作

    获取列表(单页)全部数据 删除某行元素 查找并删除元素(目前仅支持删除单条数据,循环删除待继续研究) 结果示例

    2024年02月13日
    浏览(43)
  • Python 算法基础篇之数组和列表:创建、访问、添加和删除元素

    在算法和数据结构中,数组和列表是常见的数据结构,用于存储和操作一组数据。在 Python

    2024年02月16日
    浏览(32)
  • Python循环中删除元素技巧:避免迭代错误的新列表方法和倒序遍历

      在Python中,如果你在循环过程中边遍历边删除列表元素,可能会导致一些意外的结果,因为在循环中直接修改正在迭代的列表可能会导致迭代错误或不一致的结果。这是因为在修改列表的同时,迭代器可能会失效。 为了安全地遍历列表并删除元素,可以考虑使用新的列表来

    2024年01月17日
    浏览(44)
  • C语言 - 删除数组中的指定元素(Delete)

    目录   引言: 题目说明: 举例分析: 初始状态: step 1:  Step 2:  Step 3 :  Step 4 :  将最后一个元素赋值为0  Step 5 :将i下标向前迁移一位(重复判断): 代码实现:  总结:   这是数组中一个比较简单的题目,今天把它单独拎出来的原因就是在我即将要写的数据结构的顺

    2023年04月09日
    浏览(38)
  • JS数组删除指定下标元素 JS删除对象指定元素

    一、JS数组删除指定下标元素 splice方法——Array.splice(index,n) 参数语义化理解:删除以下标index为起点的n个元素。(之后的元素会往前移动) 注意:splice会直接改变原数组  参考:JS数组删除指定下标元素_大浩籽的博客-CSDN博客_js数组删除指定下标元素 二、JS删除对象指定元素 参

    2024年02月13日
    浏览(33)
  • 【Python中extend()方法 列表的扩展、多个列表合并】

    选择题 以下python代码输出结果是什么? aList=[123,\\\'xyz\\\'] bList=[456,\\\'apple\\\'] aList.extend(bList) aList 选项: A [123, \\\'xyz\\\', 456, \\\'apple\\\'] B [123, \\\'xyz\\\'] C [123, 456] D [\\\'xyz\\\', \\\'apple\\\']   问题解析 1.extend()函数的功能是:在列表的末尾追加多个值。extend()函数没有返回值,只是在已存在的列表中进行更改。

    2023年04月08日
    浏览(38)
  • python查看列表一共有多少元素

    Python是一门高级编程语言,它在数据科学和人工智能领域得到了广泛的应用。在Python中,列表是一种非常常用的数据类型。列表可以包含任何数据类型的元素,包括数字、字符串、布尔值等等。当我们使用Python编写程序时,经常会遇到需要查看列表中元素数量的情况。本文将

    2024年04月27日
    浏览(39)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包