python-3.x - 访问列表列表中的非连续多个条目
问题描述
我有一个由 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)]
但是,创建它有点问题。我尝试创建一个空列表列表,但我无法一次访问所有相关条目。有没有优雅的方法呢?
解决方案
这是我的做法:
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], []]
推荐阅读
- javascript - 基于多行求和
- optimization - 如何强制连续变量具有相同的值?
- mysql - MySQL 5.7:作为表的子查询
- django - 如何集成 Django Import Export 和 Wagtail?
- python-3.x - 使用工人时,Scipy.optimize 和回调不起作用
- amazon-web-services - 未找到 ID 为 vpc 的 vpc 的匹配子网
- reactjs - 有没有办法在所有 IDE 中使用 React 中的绝对路径?
- python - 列和多行之间的减法
- php - 如何正确延迟laravel中的每100封邮件
- javascript - Intersection Obsser 在 Angular 7 应用程序中冻结 IE11