遇到python错误<generator object =“” <genexpr =“”>

时间:2018-08-14 16:25:36

标签: python list nested set

我跑步时

a = ["I","love","you"]
a = {(word) for word in a}
print a

我得到这个结果

set(['I', 'you', 'love'])

这就是我的期望。

但是当我跑步

a = ["I","love","you"]
a = {((word) for word in c)for c in a}
print a

我得到了一些意外的结果:

set([<generator object <genexpr> at 0x1004d5280>, <generator object <genexpr> at 0x1004d5320>, <generator object <genexpr> at 0x1004d5370>])

我期望的是

set(['e','I','u','o','v','l','y')

有人可以告诉我导致此问题的原因吗?

1 个答案:

答案 0 :(得分:4)

这是语法问题。 (word)等同于word。但是,如果在用括号括起来的表达式中包含for循环,则将其视为生成器表达式(PEP 289)。

相反,请直接使用嵌套循环:

res = {word for c in a for word in c}

# {'I', 'e', 'l', 'o', 'u', 'v', 'y'}

语法类似于常规的for循环:

res = set()
for c in a:
    for word in c:
        res.add(word)