Python 有条件地从数组中删除元素

Python 有条件地从数组中删除元素,python,arrays,list,Python,Arrays,List,我想有条件地从任意长度的数组中删除一个元素,例如 list = [1, 2, 3, 4, 3, 2, 1] condition = 3 for i in range(len(list)): if list[i] >= condition: list.pop(i) 会导致 list = [1, 2, 2, 1] 有没有一种更为“pythonic”的方法,比如列表理解 Thandel在这里,使用列表理解: list = [1, 2, 3, 4, 3, 2, 1]

我想有条件地从任意长度的数组中删除一个元素,例如

list = [1, 2, 3, 4, 3, 2, 1]
condition = 3

for i in range(len(list)):
    if list[i] >= condition:
        list.pop(i)
会导致

list = [1, 2, 2, 1]
有没有一种更为“pythonic”的方法,比如列表理解


Thandel

在这里,使用列表理解:

list = [1, 2, 3, 4, 3, 2, 1]
condition = 3
newlist = [x for x in list if x < condition]
list=[1,2,3,4,3,2,1]
条件=3
newlist=[x小于条件时列表中x的x]

在这里,使用列表理解:

list = [1, 2, 3, 4, 3, 2, 1]
condition = 3
newlist = [x for x in list if x < condition]
list=[1,2,3,4,3,2,1]
条件=3
newlist=[x小于条件时列表中x的x]

如果您希望修改原始列表,则需要类似于您正在做的事情。如果你想要一个新的列表,下面的一行就可以了

[i for i in llist if i < 3]
[如果i<3,则LIST中的i代表i]

请注意,我已将您的变量重命名为llist,因为
list
是一个内置变量。

如果您希望修改原始列表,则需要类似您正在执行的操作。如果你想要一个新的列表,下面的一行就可以了

[i for i in llist if i < 3]
[如果i<3,则LIST中的i代表i]

请注意,由于
list
是一个内置变量,我已将您的变量重命名为llist。

您必须坚持使用
list
数据类型吗?你想过使用numpy数组吗? 使用numpy的pythonic方式如下所示:

import numpy as np
arr = np.array([1, 2, 3, 4, 3, 2, 1])
condition = 3

conditioned_arr = arr[arr < condition]

>>> print(conditioned_arr)
array([1, 2, 2, 1])
将numpy导入为np
arr=np.数组([1,2,3,4,3,2,1])
条件=3
条件反射=反射[反射<条件]
>>>打印(条件反射)
数组([1,2,2,1])

您必须坚持使用
列表
数据类型吗?你想过使用numpy数组吗? 使用numpy的pythonic方式如下所示:

import numpy as np
arr = np.array([1, 2, 3, 4, 3, 2, 1])
condition = 3

conditioned_arr = arr[arr < condition]

>>> print(conditioned_arr)
array([1, 2, 2, 1])
将numpy导入为np
arr=np.数组([1,2,3,4,3,2,1])
条件=3
条件反射=反射[反射<条件]
>>>打印(条件反射)
数组([1,2,2,1])

您的代码有缺陷。如果您从一个列表开始
[1,4,5,1,1]
,您的结果将是
[1,5,1,1]
(在捕获
索引器之后)。最具python风格的事情是编写工作代码。(如果删除索引2处的项目,则索引3处的项目将滑动以替换它。如果您检查的下一个索引是索引3,则您刚刚跳过了一个项目。
索引器
是因为您根据原始大小计算索引。如果删除项目,则索引将指向末尾。)使用
list
作为变量名被认为是错误的,因为您的代码有缺陷。如果您从一个列表开始
[1,4,5,1,1]
,您的结果将是
[1,5,1,1]
(在捕获
索引器之后)。最具python风格的事情是编写工作代码。(如果删除索引2处的项目,则索引3处的项目将滑动以替换它。如果您检查的下一个索引是索引3,则您刚刚跳过了一个项目。
索引器
是因为您根据原始大小计算索引。如果删除项目,则索引将指向末尾。)使用
list
作为变量名称被认为是不好的形式
llist[:]=[i for i in llist if i<3]
将是在修改原始列表时执行此操作的一种方法。
llist[:]=[i for i in llist if i<3]
将是在修改原始列表时执行此操作的一种方法。