繁体   English   中英

将 Python 二维数组中的行设置为没有 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM