【问题标题】:Run into a python error <generator object <genexpr>遇到 python 错误 <generator object <genexpr>
【发布时间】:2018-08-14 16:25:36
【问题描述】:

当我跑步时

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

谁能告诉我导致这个问题的原因?

【问题讨论】:

  • 您到底想得到什么?您的预期结果是否有额外的[ 或缺少]?如果你只想要所有字母的集合,你会做{c for w in a for c in w}

标签: python list nested set


【解决方案1】:

这是一个语法问题。 (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)

【讨论】:

  • 是的~我接受了。非常感谢。这是我第一次在stackoverflow上发帖,感觉很好
猜你喜欢
  • 2013-04-28
  • 2020-01-11
  • 2018-05-11
  • 1970-01-01
  • 2020-01-08
  • 2016-04-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多