python for循环,带有;减少;列表

python for循环,带有;减少;列表,python,list,Python,List,我想通过过滤可以被2除的数字来减少列表。这里有两个问题: 我知道这是一个愚蠢的方法,有没有更好的(或者更像蟒蛇的)方法 如果我真的想使用for循环来处理这个任务,因为列表的实际过滤规则比“可二除”更复杂,我发现“迭代变量”loop没有像R中预期的那样减少1,我如何使它工作 更新01 谢谢你的及时回复,问题的第一部分已经解决了,但是第二部分呢?如果我想使用for循环来处理它,并使循环减少`如果满足了'dividable by two'的条件,该怎么办?列表理解可以实现以下技巧: a = [1,

我想通过过滤可以被2除的数字来减少列表。这里有两个问题:

  • 我知道这是一个愚蠢的方法,有没有更好的(或者更像蟒蛇的)方法
  • 如果我真的想使用for循环来处理这个任务,因为列表的实际过滤规则比“可二除”更复杂,我发现“迭代变量”
    loop
    没有像
    R
    中预期的那样减少1,我如何使它工作
更新01
谢谢你的及时回复,问题的第一部分已经解决了,但是第二部分呢?如果我想使用for循环来处理它,并使
循环
减少`如果满足了'dividable by two'的条件,该怎么办?

列表理解可以实现以下技巧:

a = [1,2,3,4]
for loop in range(0,len(a)):
    if a[loop]%2==0:
        a.remove(a[loop])
        loop = loop - 1

如果要从列表中删除所有元素,如果不能被2整除,那么最好的方法是创建一个新列表,而不包含不能被2整除的数字,如下所示

# Define data in variable a
a = [1,2,3,4]
# Apply the list comprehension to filter list a
a = [i for i in a if i%2==0]
[item for item in a if item % 2 != 0]
filter(lambda item: item % 2 != 0, a)
list(filter(lambda item: item % 2 != 0, a))
您还可以使用
过滤器
功能,如下所示

# Define data in variable a
a = [1,2,3,4]
# Apply the list comprehension to filter list a
a = [i for i in a if i%2==0]
[item for item in a if item % 2 != 0]
filter(lambda item: item % 2 != 0, a)
list(filter(lambda item: item % 2 != 0, a))
如果您使用的是Python3.x,那么您需要使用
list
函数从
filter
对象生成项目列表,如下所示

# Define data in variable a
a = [1,2,3,4]
# Apply the list comprehension to filter list a
a = [i for i in a if i%2==0]
[item for item in a if item % 2 != 0]
filter(lambda item: item % 2 != 0, a)
list(filter(lambda item: item % 2 != 0, a))
除了这些方法之外,如果您想进行就地替换,那么您可能希望以相反的方式进行,如下所示

# Define data in variable a
a = [1,2,3,4]
# Apply the list comprehension to filter list a
a = [i for i in a if i%2==0]
[item for item in a if item % 2 != 0]
filter(lambda item: item % 2 != 0, a)
list(filter(lambda item: item % 2 != 0, a))
注意:尽可能选择列表理解法。

您可以使用:


我会尝试将谓词不包含的每一项添加到新列表中,因此如果它可以被2整除,您想将其减少1,对吗?@sundarnatarajССааа是的,循环应该减少1,因为a变成
[1,3,4]
然后他只想保留奇数,因此您应该将过滤器中的lambda函数更改为:lambda x:x%2@PiotrDabkowski刚刚意识到并改变了它:)