python 中有没有办法在列表理解中遍历矩阵

Is there way in python to traverse a matrix in list comprehension

我有以下矩阵:

from random import randint

n, m = 5, 7
matrix = [[randint(-9, 9) for j in range(m)] for i in range(n)]

如何在没有自己的循环的情况下借助列表理解遍历此矩阵?

我的目标是获取小于 k 且位于奇数行的元素列表,通常我想将这段代码汇总到列表理解中:

sample = []
for i in range(n):
    for j in range(m):
        if matrix[i][j] < k and i % 2 != 0:
            sample.append(matrix[i][j])

我试过了,但是没用:

sample = [elem for elem in row for row in matrix if elem < k]

我相信这与您的示例的作用相同,但在列表理解中:

import itertools

sample = [ matrix[i][j] for (i, j) in itertools.product(range(n), range(m)) if matrix[i][j] < k and i % 2 != 0 ]

我只是在做一些 Python 研究,偶然看到一些代码让我知道您可以在列表理解中使用嵌套 for 循环。有了这些知识,并且刚刚回答了这个问题,我想我应该感谢这个世界来写第二个答案。

我认为这个更好,因为 A) 它不使用必须导入的模块,B) 它更简单、更酷:

sample = [ matrix[i][j] for i in range(n) for j in range(m) if matrix[i][j] < k and i % 2 != 0 ]

所以 if 语句嵌套在列表解析中!谁知道呢