Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/308.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/5.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,我有一个浮动列表,我想删除大于某个数字或小于某个(不同)数字的元素。这是我目前掌握的代码: a = ['239.12835442230858', '22.756759356300982', '32.98715001831536', '460.11899977144816', '747.5029387021966', '25.97292253382583', '150.94457242947556', '197.14098031753895', '394.44390781374057', '320

我有一个浮动列表,我想删除大于某个数字或小于某个(不同)数字的元素。这是我目前掌握的代码:

a = ['239.12835442230858', '22.756759356300982', '32.98715001831536', '460.11899977144816', '747.5029387021966', '25.97292253382583', '150.94457242947556', '197.14098031753895', '394.44390781374057', '320.11301380981826', '138.66237294322895', '87.7095435481745', '427.8799219223041', '445.9006435386053', '62.716459379313704', '259.19872485615906', '212.75590521862267', '455.3882240904654', '259.07638854400676', '425.90576134140446']
print type(a[0])
for i, val in enumerate(a):
    a[i] = float(val)

print type(a[0])

for i in a:
    if i < 30 or i > 200:
        a.remove(i)
a=['239.12835442230858', '22.756759356300982', '32.98715001831536', '460.11899977144816', '747.5029387021966', '25.97292253382583', '150.94457242947556', '197.14098031753895', '394.44390781374057', '320.11301380981826', '138.66237294322895', '87.7095435481745', '427.8799219223041', '445.9006435386053', '62.716459379313704', '259.19872485615906', '212.75590521862267', '455.3882240904654', '259.07638854400676', '425.90576134140446']
打印类型(a[0])
对于i,枚举(a)中的val:
a[i]=浮动(val)
打印类型(a[0])
对于我来说,在一个:
如果i<30或i>200:
a、 删除(i)
但这并不像我预期的那样有效。当我在此处可视化此代码时:,它似乎跳过了删除的元素之后的元素。我看不出为什么我的代码会出现这种情况


另外,我知道我可以用
np.where
做我想做的事情,但我想知道为什么我的当前代码不起作用。

你在迭代列表时正在修改它。改为做列表理解:

[i for i in a if not (i < 30 or i > 200)]
[如果不是(i<30或i>200)中的i代表i]

Ah!这很有道理,谢谢你,但是为什么元素会被跳过?我对他最初的问题很感兴趣。我知道这段代码给出了所需的行为,但我很好奇为什么一些符合这两个条件的项目不会被删除。如果你只按照a:if float(I)>200:a.remove(I)中的I进行操作实际上,您仍然会得到大于200的值。当我尝试时,浮动747.和445.仍然挂起。此列表返回的值是您尝试返回的值remove@vash_the_stampede你说得对,我会根据你的要求进行编辑。我希望看到问题的答案,而不是给出所需答案的代码put.为什么执行此方法时会跳过某些元素?@d_kennetz:列表迭代器是基于索引的。如果在迭代时删除元素,则下一个值将下移到当前索引,然后迭代器将索引前进到下一个项目,跳过刚刚下移的项目。我发誓这个问题已经被问了一个小问题已经n次了(刚刚添加了四个副本,还有很多)。哈哈,阴影关闭它!