Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/285.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 按条件从列表中排除值的循环失败_Python - Fatal编程技术网

Python 按条件从列表中排除值的循环失败

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中大于给定最大值的所有值。我编写了两个循环,应该能够做到这一点:

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