如何编写列表推导来创建集合列表?

时间:2013-12-23 11:49:57

标签: python set list-comprehension

我尝试使用

创建集[set([0]), set([1]), set([2]),..]的列表
>>> [set(i) for i in range(9)]

但是效果并不好

Traceback (most recent call last):
  File "<interactive input>", line 1, in <module>
TypeError: 'int' object is not iterable

如何使用列表推导创建该列表?有可能吗?

1 个答案:

答案 0 :(得分:5)

要使用列表推导创建[set([0]), set([1]), set([2]),..],您可以使用:

>>> [{i} for i in range(5)] 
[set([0]), set([1]), set([2]), set([3]), set([4])]

除非您在2.7版之前使用任何版本的Python,否则请使用:

>>> [set((i,)) for i in range(5)]
[set([0]), set([1]), set([2]), set([3]), set([4])]

但是,创建一个集合列表似乎有点愚蠢,其中每个集合都是递增序列的单个整数。无论你想要完成什么,可能会以不同的方式做得更好,请咨询The XY Problem并确保你不会陷入其中。

根据您要完成的工作,可能有更好的方法来存储您的数据,或执行您尝试执行的逻辑。

注意:

最初我写了[set([i]) for i in range(5)]但是在计算了不同的选项之后,我意识到将整数转换为单项列表比将它转换为元组更浪费,所以我改变了我的答案,然后改变了它再次使用set literal,时间如下:

>python -mtimeit "[{i} for i in range(5)]"
1000000 loops, best of 3: 0.853 usec per loop

>python -mtimeit "[set((i,)) for i in range(5)]"
1000000 loops, best of 3: 1.64 usec per loop

>python -mtimeit "[set([i]) for i in range(5)]"
1000000 loops, best of 3: 1.87 usec per loop