2 回答

TA贡献1794条经验 获得超8个赞
您必须制作一个新列表或使用一个副本。当您在循环浏览时更改列表时,将跳过某些项目。我会这样做:
def filter_low(lst, maxk, threshold=3):
for item in lst:
c = sum(1 for k in maxx if item==k.f)
if c >= threshold:
yield item
new_seen = list(filter_low(seen, maxk, 3))
与以下内容相同:
new_seen = [item for item in seen
if sum(1 for k in maxx if item==k.f) >= 3]
您可以通过以下方式更改原始列表
seen[:] = [item for item in seen
if sum(1 for k in maxx if item==k.f) >= 3]

TA贡献1842条经验 获得超22个赞
修改要迭代的列表绝不是一个好主意。您可以遍历一个副本并使用以下命令修改实际列表
popped = 0
for indj, j in enumerate(seen[:]):
s = sum(j == k.f for k in maxx)
if s < 3:
seen.pop(indj - popped)
popped += 1
如果seen列表很大,可能效率不高。
添加回答
举报