尝试从列表中删除时跳过的元素

时间:2018-10-04 03:23:37

标签: python

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

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)

但是,这不符合我的预期。当我在以下http://www.pythontutor.com/visualize.html处查看此代码时,似乎正在跳过元素被删除之后的元素。我看不出我的代码会出现这种情况。

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

1 个答案:

答案 0 :(得分:2)

正在遍历列表时修改列表。而是进行列表理解:

[i for i in a if not (i < 30 or i > 200)]