python – 如何将这一行for循环更改为正常for循环?

这是一个我无法理解的一般性问题.

如果我有这个:

somelist = [[a for a, b in zip(X, y) if b == c] for c in np.unique(y)]

如何将其写为正常的多行循环?我似乎从来没有做对.

编辑:到目前为止,我已经尝试过:

somelist = []
for c in np.unique(y):
    for x, t in zip(X, y):
        if t == c:
            separated.append(x)

但我不确定这是否正确,因为我没有在我的代码的其他部分得到预期的结果.

最佳答案 要展开嵌套的理解,请按照下列步骤操作:

>首先创建一个空容器:somelist = []
>如果理解有一个if子句,请在for之后加上
>然后,从最里面开始,将嵌套的理解展平

内心理解是:

row = []
for a, b in zip(X, y):
    if b == c:
        row.append(a)

然后,somelist只不过是[np.unique(y)]中的c行,其中row取决于几个因素.
这相当于:

somelist = []
for c in np.unique(y):
    somelist.append(row)

所以完整的版本是:

somelist = []
for c in np.unique(y):
    row = []
    for a, b in zip(X, y):
        if b == c:
        row.append(a)
    c.append(row)
点赞