Python for 循环与“减少”列表

1 投票
3 回答
961 浏览
提问于 2025-04-18 13:39
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整除的数字来减少一个列表。这里有两个问题:

  • 我知道这个方法很笨,有没有更好(或者更符合Python风格)的方法?
  • 如果我真的想用for循环来解决这个问题,因为我实际的过滤规则比“能被2整除”要复杂,我发现“循环变量”loop没有像我预期的那样减少1,就像在R中那样,我该怎么做才能让它正常工作?

更新 01

谢谢你的快速回复,第一个问题解决了,但第二个问题呢?如果我想用for循环来处理这个,并且希望在满足“能被2整除”的条件时让loop减少1,该怎么做呢?

3 个回答

0

可以用列表推导式来解决这个问题:

# 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]
1

你可以使用 filter 这个函数:

filter(lambda x: x % 2 == 0, a)
2

如果你想从列表中去掉所有不能被2整除的元素,最好的办法就是创建一个新列表,把那些不能被2整除的数字排除掉,像这样

[item for item in a if item % 2 != 0]

你也可以使用 filter 函数,像这样

filter(lambda item: item % 2 != 0, a)

如果你在使用 Python 3.x,那么你需要用 list 函数从 filter 对象生成一个列表,像这样

list(filter(lambda item: item % 2 != 0, a))

除了这些方法,如果你想在原来的列表上直接替换,那你可能需要反向操作,像这样

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

注意:尽量使用列表推导的方法,这样会更好。

撰写回答