python在列表中删除元素的方法,python中删除列表元素的方法
本文主要介绍python安全删除列表元素的方法。共享方法包括创建新列表、过滤元素和迭代列表副本。以下相关内容朋友们可以参考一下。
00-1010方法1:创建新列表,过滤元素1a)导出列表,创建新列表1b)导出列表,给A赋值[3360] 1c)使用itertools.filterfalse()方法2:在列表副本上迭代公共陷阱前言:。
看似简单的任务往往暗藏陷阱!
一个常见的任务是在一个列表上迭代,并根据条件删除一些元素。本文将展示完成这项任务的不同方法,同时展示一些要避免的陷阱。
假设我们需要修改列表A,我们必须删除所有不均匀的项。
首先实现辅助函数even(x)来确定一个数字x是否是偶数:
a=[1,2,2,3,4]
定义偶数(x):
return x % 2==0
目录
方法1: 创建新列表,过滤元素
使用列表推导创建一个新的列表,只包含你不想删除的元素,并把它分配回a:
a=[1,2,2,3,4]
定义偶数(x):
return x % 2==0
# list派生,但是创建了一个新的变量a。
a=[x为a中的x,如果不是偶数(x)]
# - a=[1,3]
打印(一份)
1a) 列表推导,创建新列表
上面的代码创建了一个新的变量a,我们也可以通过给slice a赋值来原位改变现有的列表[:]。如果有需要反映变更的其他参考,这个方法会更有效率,而且可能会很有用。
a=[1,2,2,3,4]
定义偶数(x):
return x % 2==0
#列表派生,但分配到一个[:]来改变列表中的位置
a[:]=[x for x in a if not even(x)]
# - a=[1,3]
打印(一份)
1b) 列表推导,对a[:]赋值
Itertools模块为非常有效的循环迭代提供了各种函数,并提供了过滤元素的方法。
a=[1,2,2,3,4]
定义偶数(x):
return x % 2==0
#通过itertools快速过滤
从itertools导入过滤器false
a[:]=filterfalse(偶数,a)
# - a=[1,3]
打印(一份)
1c) 使用itertools.filterfalse()
如果您真的想保留for语法,那么您需要迭代列表的副本(副本可以通过使用[:]简单地创建)。
现在你可以在条件为True时从原始列表中删除元素:
a=[1,2,2,3,4]
定义偶数(x):
return x % 2==0
#请注意,它在列表副本a上循环[:]
对于[:]:中项目
如果偶数(项目):
a .移除(项目)
# - a=[1,3]
打印(一份)
方法2:列表副本上迭代
千万不要在同一个列表上循环,在迭代过程中修改!
和上面的代码一样,只是没有在副本上循环。删除一个元素会将所有后续元素向左移动一个位置,因此在下一次迭代中,会跳过一个元素。
这可能会导致不正确的结果:
a=[1,2,2,3,4]
定义偶数(x):
return x % 2==0
#直接在变量A上循环,而不是在副本上
对于a:中的项目
如果偶数(项目):
a .移除(项目)
# - a=[1,2,3]!
打印(一份)
另外,在列表循环过程中,千万不要修改索引!
这是不正确的,因为在循环中改变I不会影响下一次迭代中I的值。这个例子也会产生意想不到的效果,甚至导致IndexErrors,
比如这里:
a=[1,2,2,3,4]
定义偶数(x):
return x % 2==0
#试图在循环中更改索引I,但出现了错误!
对于范围内的I(len(a)):
如果偶数(a[i]):
del a[i]
i -=1
# - IndexError:列表索引超出范围
打印(一份)
关于python安全删除列表元素的方法的文章到此结束。关于python删除列表元素的更多信息,请搜索热门IT软件开发工作室之前的文章或者继续浏览下面的相关文章。希望大家以后多多支持热门IT软件开发工作室!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。