有没有办法将以下代码减少到python中的两行(x为一行,y为另一行)?

时间:2018-03-12 22:25:13

标签: python

x=np.arange(9).reshape((3, 3))
y=[]
for i in x:
    for j in i:
        y.append((i, j))

在单行python代码中获取y的最佳方法是定义一个二维数组,然后将其展平

y=np.ravel([[(i, j) for j in i] for i in x])

有更好的方法来定义y吗?

1 个答案:

答案 0 :(得分:2)

您可以使用itertools.chain.from_iterable展平2d列表。

import numpy as np
from itertools import chain

x = np.arange(9).reshape((3, 3))
y = chain.from_iterable(x)

现在x看起来像

[[0 1 2]
 [3 4 5]
 [6 7 8]]

y(当迭代或转换为列表时)看起来像

[0, 1, 2, 3, 4, 5, 6, 7, 8]

chain功能实际上只是撤消了reshape。那么为什么不把它留下呢?