2 回答
TA贡献1836条经验 获得超13个赞
举个例子:
[1、2、3、4、5]
该列表的长度为5,范围(5)= [0,1,2,3,4]
假设在迭代1中,您删除了一个元素。现在列表的长度为4,但您仍将遍历第5个索引。在这种情况下,第五个元素不再存在。
这次,您可能遇到的另一个问题是不会跳过元素,而不会产生错误。以相同的示例为例,您将1删除。将第二个元素2移到0索引,而当迭代第二个索引列表1时实际上是3,完全跳过以检查先前的第二个元素(2)。
在大多数计算语言中解决此问题的常用方法是向后遍历该列表。
但是在python中,最好的方法实际上是先进行搜索,然后进行删除操作。首先搜索所有需要删除的元素,将它们存储在一组中,然后从列表中逐一删除它们。
另一种方法是使用itertools过滤器创建过滤列表:
import itertools
ifilter(lambda x: x==nMoments, moment_list_sum)
TA贡献1856条经验 获得超11个赞
正如其他人提到的那样,您正在修改列表的长度,因此到结束时,您正在查看的索引不再存在。
相反,您应该建立包含所需元素的替换列表。这可能会起作用:
LHS, moment_list = zip(*[
(LHS_elem, moment_list_elem)
for i, (LHS_elem, moment_list_elem) in enumerate(zip(LHS, moment_list))
if moment_list_sum[i] != nMoments])
这样做是将两个目标列表连接在一起,然后使用枚举对它们进行迭代以提供一个索引,您可以使用该索引在第三个列表中进行查找,然后将其解压缩。
添加回答
举报