当我跑步时
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')
谁能告诉我导致此问题的原因?
这是一个语法问题。(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)