【发布时间】:2017-12-14 01:43:38
【问题描述】:
假设我有一个列表l = [1,2,3],我想创建一个包含该列表中所有数字及其平方的集合。理想情况下,在单个理解表达式中。
我能想到的最好的方法是(对列表进行两次迭代):
set(_ for _ in l).union(_ * _ for _ in l)
【问题讨论】:
-
它比我认为的嵌套生成器理解更清晰。 BTW,可以简化为
{_ for _ in l} | {_ ** 2 for _ in l} -
@Sraw 这与显式
union()函数同义,仍然需要对列表进行两次迭代。 -
我知道,嗯.. 很难解释。有一个答案给出了嵌套生成器的理解,尽管它确实更短,但我看起来很困惑。但现在这个答案已被删除!我写的肯定是同义词,我只想说可以更短更清晰。
-
其实我找到了解决办法:
{*(l + [_ ** 2 for _ in l])}. -
@Sraw 仍然在
l上迭代两次 ;-) 看看下面的答案。