【发布时间】:2013-04-17 06:49:17
【问题描述】:
我有一个名为square 的简单列表:
square = [[1,2,3],[4,5,6],[7,8,9]]
我的目标是遍历九个元素中的每一个,并同时获取该元素的行和列中的所有值。在此示例中,第一次迭代(对于元素 1)应该返回 [1,2,3] 和 [1,4,7],第二次(对于元素 2)将返回 [1,2,3] 和 [2,5,8],等等。以下代码有效:
for r in range(3):
for c in range(3):
row = square[r]
col = [square[c1][c] for c1 in range(3)]
但是是否有另一种方法使用 base Python 来执行此操作?
我可以使用for c in zip(*square): 对列表进行转置和迭代,如果我只需要列一次,这可以工作,但是没有办法使用数组切片来索引列而不存储矩阵的转置以及矩阵本身?
不幸的是,目前无法选择像 numpy 这样的库,因为它们需要首先通过我们的代码审查流程,这需要很长时间(大约六个月。 ..)。我没有编写政策或设计程序,但这是我必须在这个机构工作的政策。我已经提交了 numpy 的请求,但与此同时,我只是在使用基础 Python。
【问题讨论】:
-
使用numpy
-
@JBernardo 查看我的编辑。我已经在 numpy 上提出了代码审查过程的请求,但它通常需要 很长 时间,所以同时我希望使用基本 Python 的想法。
-
@MartijnPieters 这意味着我转置数组并保留它的两个副本(原始副本和转置副本),然后遍历它们,对吗?我知道如何转置数组,但由于我已经逐个元素地迭代它,我认为可能还有另一种我不知道的方式。
-
只要您需要按列访问,只需直接遍历
zip(*square)。 -
@MartijnPieters 嗯,我必须解决这个问题,因为我需要同时访问每个元素的行和列;我不仅需要获取每列一次。不过,如果我同时遍历
square和zip(*square),那应该是微不足道的。
标签: python python-3.x