[英]Is it possible to indexing 2d array by another 2d array row by row without loop in NumPy?
[英]Set rows in Python 2D array to another row without Numpy?
我想在不使用 NumPy 的情况下将 Python 嵌套列表的一行的值“设置”到另一行。
我有一个样本清单:
lst = [[0, 0, 1],
[0, 2, 3],
[5, 2, 3]]
我想让第 1 行到第 2 行,第 2 行到第 3 行,第 3 行到第 1 行。我想要的 output 是:
lst = [[0, 2, 3],
[5, 2, 3],
[0, 0, 1]]
在不使用 Numpy 的情况下如何做到这一点?
我试图做类似arr[[0, 1]] = arr[[1, 0]]
的事情,但它给出了错误'NoneType' object is not subscriptable
。
由于 python 实际上不支持多维列表,因此您的任务变得更简单,因为您正在处理包含行列表的列表。
要滚动列表,只需重新组装外部容器:
result = lst[-1:] + lst[:-1]
Numpy 对整数列表(如[0, 1]
、元组(如:, -1
)、单个整数和切片有特殊解释。 Python 列表仅将单个整数和切片理解为索引,并且不接受元组作为多维索引,因为列表基本上是一维的。
一种非常直接的方法:
arr = [arr[-1], *arr[:-1]]
或另一种实现相同目的的方法:
arr = [arr[-1]] + arr[:-1]
arr[-1]
是数组的最后一个元素。 arr[:-1]
是直到数组的最后一个元素的所有内容。
第一个解决方案构建一个新列表并首先添加最后一个元素,然后添加所有其他元素。 第二个构造一个仅包含最后一个元素的列表,然后使用包含 rest 的列表对其进行扩展。
注意:将列表命名为数组并不能使其成为一个。 尽管您可以访问arr[i1][i2]
之类的列表列表,但它仍然只是列表列表。 查看 Python 实际数组的array
文档。
用户@MadPhysicist 提供的解决方案归结为此处提供的第二个解决方案,因为[arr[-1]] == arr[-1:]
使用这种概括
arr = [arr[-1]] + arr[:-1]
根据您的示例,这意味着
arr[0],arr[1],arr[2] = arr[1],arr[2],arr[0]
或者
arr = [arr[2]]+arr[:2]
或者
arr = [arr[2]]+arr[:-1]
你可以用这个
>>> lst = [[0, 0, 1],
[0, 2, 3],
[5, 2, 3]]
>>> lst = [*lst[1:], *lst[:1]]
>>>lst
[[0, 2, 3],
[5, 2, 3],
[0, 0, 1]]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.