在python中'迭代期间设置更改大小'的RuntimeError

时间:2017-03-27 01:50:17

标签: python

我们可以在 java 中的'for'循环中使用set.iterator().remove()。相比之下,如何编写类似的 python 代码?

def fun1():
    a=set(range(10))
    for num in a:
        if(num%2==0):
            a.remove(num)
    print(a)

def fun2():
    a=range(10)
    for num in a:
        if(num%2==0):
            a.remove(num)
    print(a)

#RuntimeError: Set changed size during iteration
fun1()

#works well
fun2()

1 个答案:

答案 0 :(得分:1)

这应该有效:

def fun3():
    a = set(range(10))
    return set(num for num in a if num % 2)

print(fun3())

答案使用generator expression num for num in a if num % 2来过滤a的成员。