带有“减少”列表的循环的python

时间:2014-07-17 08:45:05

标签: python list

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的数字来减少列表。这里有两个问题:

  • 我知道这是一种愚蠢的方法,有更好的(或更多的pythonic)方式吗?
  • 如果我真的想使用for循环来处理这个任务,因为列表的实际过滤规则比'可分为两个'更复杂,我发现'迭代变量'loop是在R中没有像预期的那样减少一个,我怎样才能让它发挥作用?

更新01

感谢您的快速回复,问题的第一部分已经解决,但第二部分呢?如果我想使用for循环来处理它并且如果满足'可分为2的条件'则使loop减少,该怎么办?

3 个答案:

答案 0 :(得分:2)

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

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

您也可以使用filter功能,例如

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

如果您使用的是Python 3.x,则需要使用filter函数从list对象生成项目列表,如下所示

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])

注意:尽可能选择列表理解方法。

答案 1 :(得分:1)

您可以使用filter

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

答案 2 :(得分: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]