如何制作迭代器集

时间:2015-11-28 18:34:56

标签: python python-3.x

我想迭代某个范围并创建几个仅包含当前i的集合。 (在代码中我不想为每个i做这个,但它是关于一般原则的。)

for i in range(5):
    s=set(i)
    print(s)

它说int对象不可迭代。为什么这不起作用?请保持答案简单,我是新手。

3 个答案:

答案 0 :(得分:1)

设置构造函数set(x)需要x作为某个容器,如列表或其他集合。你传递一个整数,python尝试迭代它,然后失败。

为了做到这一点,你需要传递一个x的单例,如:

for i in range(5):
  s = set([i]) # or s = set((i,))
  print(s)

或通过简化的集合构造函数

for i in range(5):
  s = {i}
  print(s)

或构造一个空集并添加你的元素

for i in range(5):
  s = set()
  s.add(i)
  print(s)

答案 1 :(得分:1)

set()需要添加序列值,而单个整数不是序列。

您可以将其包装在元组或列表中:

s = set((i,))
s = set([i])

但更好的选择是使用{..}集合文字表示法:

s = {i}

符号看起来很像创建字典,但您只列出值,而不是键。

演示(在Python 2上,表示使用set([..])表示法):

>>> i = 42
>>> set((i,))
set([42])
>>> set([i])
set([42])
>>> {i}
set([42])

Python 3使用文字符号反映集合:

>>> i = 42
>>> {i}
{42}

答案 2 :(得分:0)

而不是在范围内使用for循环,您也可以将其提供给set(如果您不需要更改它的内容,则将其提供给冻结集):

>>> set(range(5))
# {0, 1, 2, 3, 4}