在列表列表中,是否有一种方法可以同时获取元素的行和列中的元素?

2024-06-01 20:10:14 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个名为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]等。以下代码起作用:

^{pr2}$

但是,有没有其他方法使用basePython来实现这一点呢?在

我可以使用for c in zip(*square):对列表进行转置和迭代,如果只需要列一次,这就可以了,但是如果不存储矩阵的转置以及矩阵本身,就没有办法使用数组切片来索引列吗?在

不幸的是,像numpy这样的库目前还不是一个选择,因为它们需要先经过我们的代码评审过程,这需要很长的时间(大约6个月……)。我没有写政策,也没有设计程序,但这是我在这个机构必须遵守的政策。我已经提交了对numpy的请求,但同时,我只使用基本Python。在


Tags: 方法代码innumpy元素目标列表for
2条回答

如果您想用标准Python实现这一点,您可能需要尝试转换列表。然后您可以像正常一样索引。您可以使用zip(*square)后跟map(list,)将其转换回列表:

square = [[1,2,3],[4,5,6],[7,8,9]]

square_transposed = map(list, zip(*square))

那么square[1]就会得到[2,5,8]。在

如果您想知道*操作符在这个上下文中做什么,it unpacks the list to a series of position arguments。所以zip看到[1,2,3] [4,5,6] [7,8,9],并将它们压缩为[(1, 4, 7), (2, 5, 8), (3, 6, 9)]。最后的映射将元组转换为列表。在

使用numpy

>>> import numpy as np
>>> square = np.array([[1,2,3],[4,5,6],[7,8,9]])
>>> square[0]
array([1, 2, 3])
>>> square[..., 0]
array([1, 4, 7])
>>> square[:, 0]
array([1, 4, 7])

只使用Python

^{pr2}$

相关问题 更多 >