Python 按条件从列表中排除值的循环失败
我遇到了以下问题: 我有一个数字列表和一个最大值。 我想排除num中大于给定最大值的所有值。我编写了两个循环,应该能够做到这一点:Python 按条件从列表中排除值的循环失败,python,Python,我遇到了以下问题: 我有一个数字列表和一个最大值。 我想排除num中大于给定最大值的所有值。我编写了两个循环,应该能够做到这一点: num=[0.5,1,1.5,2] max=0.5 for eachNum in num: if eachNum>max: num.remove(eachNum) i=0 while i<len(num): if num[i]>max: num.pop(i) i=i+1 两个循环都失败了
num=[0.5,1,1.5,2]
max=0.5
for eachNum in num:
if eachNum>max:
num.remove(eachNum)
i=0
while i<len(num):
if num[i]>max:
num.pop(i)
i=i+1
两个循环都失败了。他们把1.5留在名单上,我不明白为什么。非常感谢您的帮助。循环失败,因为您在迭代列表时正在更改列表 实现这一点的一个好方法是使用过滤器: 有关更多信息,请参阅python文档:
num.popi在迭代对象时对其进行变异更改是个坏主意。尝试将通过条件的元素附加到新列表中,而不是删除失败的元素。不要在迭代时修改列表-就这么简单。如果在迭代列表时不应编辑列表,请在[0.5,1.5,2]中使用list comp:a=[x代表x。当您这样做时,项[2]突然变成项[1],但您已经迭代过该索引,因此它会跳过
num=[0.5,1,1.5,2]
max=0.5
less_than_max = list(filter(lambda x: x < max, num))