我想在python中生成一个列表,例如[0, 0^2, 1, 1^2, ... 9, 9^2]
。但是,[(i,i**2) for i in range(10)]
返回一个元组列表,而[*(i,i**2) for i in range(10)]
不起作用。
是否有任何Python方式创建这样的列表?
答案 0 :(得分:2)
您可以在列表理解中添加另一级别的迭代以获取平面列表:
[i**exp for i in range(10) for exp in [1,2]]
# [0, 0, 1, 1, 2, 4, 3, 9, 4, 16, 5, 25, 6, 36, 7, 49, 8, 64, 9, 81]
或者您可以使用itertools.chain
:
from itertools import chain
list(chain.from_iterable((i,i**2) for i in range(10)))
# [0, 0, 1, 1, 2, 4, 3, 9, 4, 16, 5, 25, 6, 36, 7, 49, 8, 64, 9, 81]
尽管我会考虑numpy
来完成这项任务:
(np.arange(10)**np.arange(1,3)[:,None]).ravel('F')
array([ 0, 0, 1, 1, 2, 4, 3, 9, 4, 16, 5, 25, 6, 36, 7, 49, 8,
64, 9, 81], dtype=int32)