转自:https://blog.csdn.net/cckavin/article/details/83618306
 

一.问题描述

这是在工作中遇到的一段代码,原理大概和下面类似(判断某一个元素是否符合要求,不符合删除该元素,最后得到符合要求的列表):

  1.  
    a = [1,2,3,4,5,6,7,8]
  2.  
    for i in a:
  3.  
    if i>5:
  4.  
    pass
  5.  
    else:
  6.  
    a.remove(i)
  7.  
    print(a)

运行结果:

二.问题分析

因为删除元素后,整个列表的元素会往前移动,而i却是在最初就已经确定了,是不断增大的,所以并不能得到想要的结果。

三.解决方法

1.遍历在新的列表操作,删除是在原来的列表操作

  1.  
    a = [1,2,3,4,5,6,7,8]
  2.  
    print(id(a))
  3.  
    print(id(a[:]))
  4.  
    for i in a[:]:
  5.  
    if i>5:
  6.  
    pass
  7.  
    else:
  8.  
    a.remove(i)
  9.  
    print(a)
  10.  
    print('-------------------------')
  11.  
    print(id(a))

运行结果:

2.filter

内建函数filter()官方文档参考:https://docs.python.org/3/library/functions.html#filter

  1.  
    a = [1,2,3,4,5,6,7,8]
  2.  
    b = filter(lambda x: x>5,a)
  3.  
    print(list(b))

运行结果:

3.列表解析

  1.  
    a = [1,2,3,4,5,6,7,8]
  2.  
    b = [i for i in a if i >5]
  3.  
    print(b)

运行结果:

4.倒序删除

因为列表总是“向前移”,所以可以倒序遍历,即使后面的元素被修改了,还没有被遍历的元素和其坐标还是保持不变的。

  1.  
    a = [1,2,3,4,5,6,7,8]
  2.  
    print(id(a))
  3.  
    for i in range(len(a)-1,-1,-1):
  4.  
    if a[i] > 5:
  5.  
    pass
  6.  
    else:
  7.  
    a.remove(a[i])
  8.  
    print(id(a))
  9.  
    print('--------------------')
  10.  
    print(a)

运行结果:

[转】Python--遍历列表时删除元素的正确做法的更多相关文章

  1. 遍历list时删除元素的正确做法

    我们往往会遇到需要删除list中满足条件的元素.举例: List<string> list_str =new List<string>() { "A",&q ...

  2. 遍历List过程中删除元素的正确做法(转)

    遍历List过程中删除元素的正确做法   public class ListRemoveTest {     3 public static void main(String[] args) { 4 ...

  3. 【原理探究】女朋友问我ArrayList遍历时删除元素的正确姿势是什么?

    简介 我们在项目开发过程中,经常会有需求需要删除ArrayList中的某个元素,而使用不正确的删除方式,就有可能抛出异常.或者在面试中,会遇到面试官询问遍历时如何正常删除元素.所以在本篇文章中,我们会 ...

  4. 【Java】List遍历时删除元素的正确方式

    当要删除ArrayList里面的某个元素,一不注意就容易出bug.今天就给大家说一下在ArrayList循环遍历并删除元素的问题.首先请看下面的例子: import java.util.ArrayLi ...

  5. Java 遍历Map时 删除元素

    Java代码   package,,,,,,,,,,,==){ System.out.println("delete this: "+key+" = "+key ...

  6. Python遍历列表删除多个列表元素

    在遍历list的时候,删除符合条件的数据,结果不符合预期 num_list = [1, 2, 2, 2, 3] print(num_list) for item in num_list: if ite ...

  7. Python遍历列表删除多个元素或者重复元素

    在遍历list的时候,删除符合条件的数据,结果不符合预期   num_list = [1, 2, 2, 2, 3] print(num_list) for item in num_list: if i ...

  8. python遍历列表删除多个元素的坑

    如下代码,遍历列表,删除列表中的偶数时,结果与预期不符. a = [11, 20, 4, 5, 16, 28] for i in a: if i % 2 == 0: a.remove(i) print ...

  9. python 遍历list并删除部分元素

    python 遍历list并删除部分元素https://blog.csdn.net/afgasdg/article/details/82844403有两个list,list_1 为0-9,list_2 ...

随机推荐

  1. CSS如何把一张横向的长图变成竖向的?

    前言: 有时候做项目过程中,设计的是一张横向的长图,但是我们需要在手机端观看的时候,也想把手机横着观看,这样视野更宽阔,如何解决这个问题呢? html <div class="imgB ...

  2. jdk8中的stream

    https://www.ibm.com/developerworks/cn/java/j-lo-java8streamapi/ Java 8 中的 Streams API 详解 Streams 的背景 ...

  3. VS + QT 出现 LNK2001 无法解析的外部符号 QMetaObject 的问题

    在一个QT项目中新建一个带QObject定义的类后 (不是继承),可能会出现LNK2001 的错误,这是由于IDE没有自动为新建的类生成 moc_XXXX.cpp 文件导致的. 一种做法是手动生成mo ...

  4. Java的selenium代码随笔(6)

    //获取元素列表public List<WebElement> ListElements(WebElement webElement, By parentBy, By childrenBy ...

  5. LeetCode33—搜索旋转排序数组

    方法一:先找到旋转点,然后根据目标值重新确定二分查找区域. 时间复杂度:用到两次二分查找,每次二分查找粗略的认为是O(logn),那么时间复杂度为2 * O(logn): 空间复杂度:O(1). in ...

  6. ES6和CommonJS的区别 以及 export和module.exports的区别

    ES6和CommonJS的区别 Javascript javascript是一种脚本编程语言,有自己独立的语法与语义,没有javascript,也就没有其他的那些概念了. ES6 JavaScript ...

  7. Leetcode 5

    HashTable Easy 1. 136. Single Number 0与0异或是0,1与1异或也是0,那么我们会得到0 class Solution { public: int singleNu ...

  8. 源码分析 ucosii/source 任务源码详细分析

    分析源码: 得先学会读文档, 函数前边的 note :是了解该程序员的思想的途径.不得不重视 代码前边的  Notes,了解思想后,然后在分析代码时看他是如何具体实现的. 1. ucosii/sour ...

  9. ubuntu18.04 使用管理员权限

    最近在ubuntu系统安装koa脚手架koa-generator初始化项目,报错提示要使用管理员权限执行命令. 正常情况下使用 sudo su 命令即可进入管理员权限,使用 su [ 用户名 ] 退出 ...

  10. python: c_char_p指向的bitmap图像数据,通过c_char_Array最终赋值给PIL的Image对象

    def GetCurrentImage(self): ok, bitmap, buff_len = self.GetCurrentFrameBitmap() #调用C函数,返回位图数据的指针. bit ...