我想在删除时迭代一个集合 里面的东西。对于deleting one item at the time或lists也有类似的问题,但确实存在 不适合我的案子。
代码如下;我在
设置ZN
并在迭代结束时删除
项目很少(属于集合temp
)。但是
迭代仍在“原始”ZN上进行。
如何修改此代码以在 我在重复它?
def CyclotomicCosets(q,n):
N=q^n-1
ZN=set(range(N))
Cosets=[]
for i in ZN:
tmp=set([])
for j in range(n):
tmp.add( i*(q^j) %N)
Cosets.append(list(tmp))
ZN=ZN.difference(tmp) # <------------ Does not do what I want
return(Cosets)
使用
while
循环和.pop()
值从集合中处理:请注意,我用集合理解替换了您的内部
for
循环,使它更快、更紧凑。这些是在Python2.7和Python3中引入的,在早期版本的Python中,您可以使用生成器表达式代替:你最初的错误是替换而不是更新它:
这并没有改变您在
for
循环中使用的原始集合。相反,您正在创建一个新的集合,并将ZN
引用指向该集合。但是,在迭代过程中不能修改
set
,因此即使就地差异也不会起作用;您必须使用ZN -= tmp
或ZN.difference_update(tmp)
,但这将导致异常:修正后的代码给出:
或者,循环
range(N)
,并保留一组已处理的值:相关问题 更多 >
编程相关推荐