如何在不循环的情况下将生成器元素添加到 set() 中?

问题描述 投票:0回答:3

这个链接它说生成器没有像迭代一样初始化。

如何将 generator 的元素添加到集合中?有没有比仅仅使用

for item in generator
之类的东西和使用
setname.add(item)
更好的方法?

生成器是通过

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

python set generator
3个回答
7
投票

您可以使用

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}

4
投票

你也可以这样做

set(gen)
:

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

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


0
投票
  poss = set((i) for i in range(5) ) 
  print(poss)
  poss = set()
  for i in range(5):
     poss.add(i)
  print(poss)
  >>> {0, 1, 2, 3, 4}
  >>> {0, 1, 2, 3, 4}
© www.soinside.com 2019 - 2024. All rights reserved.