首页 > 解决方案 > 访问列表列表中的非连续多个条目

问题描述

我有一个由 M 个向量组成的矩阵,其中每个向量的大小为 N (NxM)。我还有一个大小为 L>=M 的布尔向量,其中 M 个条目 = True。我想创建一个列表列表并将 M 向量放置在布尔向量为 True 的位置,其顺序与它们在矩阵中的顺序相同,其余的我想成为空列表

示例:M = 3,N = 4,L = 5

mat = np.array([[1, 5, 9],
               [2, 6, 10],
               [3, 7, 11],
               [4, 8, 12]])
mask = [True, False, True, True, False]

我想创建以下内容:

res = [ [1, 2, 3, 4], [], [5, 6, 7, 8], [9, 10, 11, 12], []]

可以使用以下方法访问它:

data = [res[idx] for idx in range(len(res)) if mask(idx)]

但是,创建它有点问题。我尝试创建一个空列表列表,但我无法一次访问所有相关条目。有没有优雅的方法呢?

标签: python-3.xnumpyindexing

解决方案


这是我的做法:

mi = iter(mat.T.tolist())
[(m or []) and next(mi) for m in mask]
# [[1, 2, 3, 4], [], [5, 6, 7, 8], [9, 10, 11, 12], []]

推荐阅读