遇到python错误<;生成器对象<;genexpr>;

遇到python错误<;生成器对象<;genexpr>;,python,list,nested,set,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

当我跑的时候

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>])

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

这是一个语法问题
(word)
相当于
word
。但是,如果在用括号括起来的表达式中包含
for
循环,则该循环将被视为生成器表达式()

而是直接使用嵌套循环:

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)

你到底想要什么?您的预期结果是否有额外的
[
或缺少
]
?如果你只是想要所有字母的集合,你会做
{c for w in a for c in w}
。是的,我接受了。非常感谢。这是我第一次在stackoverflow上发帖,我感觉很好
res = set()
for c in a:
    for word in c:
        res.add(word)