Python for 循环与“减少”列表
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])
注意:尽量使用列表推导的方法,这样会更好。