【发布时间】:2019-03-09 08:39:59
【问题描述】:
我有一个浮点数列表,我想删除大于某个数字或小于某个(不同)数字的元素。这是我到目前为止的代码:
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,它似乎跳过了被删除元素之后的元素。我看不出为什么我的代码会出现这种情况。
附:我知道我可以使用np.where 做我想做的事情,但我想知道为什么我当前的代码不起作用。
【问题讨论】:
-
我有兴趣看到对所提出的确切问题的答案,而不是给出所需输出的代码。为什么执行此方法时会跳过某些元素?
-
@d_kennetz:列表迭代器是基于索引的。如果在迭代时删除一个元素,下一个值将向下移动到当前索引,然后迭代器将索引推进到下一个项目,跳过刚刚向下移动的项目。我发誓这个问题已经被问过十几次了(只是添加了四个重复,还有很多)。
-
哈哈阴影关掉它!
标签: python