我尝试使用
创建集[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
如何使用列表推导创建该列表?有可能吗?
答案 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