繁体   English   中英

如何不使用循环将生成器元素添加到set()?

[英]How to add generator elements to a set() without a loop?

这个链接可以看出,生成器没有像可迭代对象那样被初始化。

如何将生成器的元素添加到集合中? 有什么比for item in generator中使用setname.add(item)setname.add(item)更好的方法吗?

生成器是由cursor.execute("SELECT ...")命令从连接到sqlite3数据库的游标返回的生成器。

您可以使用update方法:

In [3]: x = set()

In [4]: g = (i**2 for i in range(5))

In [6]: x.update(g)

In [7]: x
Out[7]: {0, 1, 4, 9, 16}

update修改x 如果只想返回一个新集合,则可以使用union

In [8]: x = set()

In [9]: g = (i**2 for i in range(5))

In [10]: x.union(g)
Out[10]: {0, 1, 4, 9, 16}

你也可以只做set(gen)

>>> set(x**2 for x in range(5))
set([0, 1, 4, 9, 16])

(请注意,这会创建一个仅包含生成器中元素的新集合。如果要将元素添加到预先存在的集合中,则需要按照unutbu的回答进行操作。)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM