gpt4 book ai didi

python - 如何多次移动二维数组的列,同时仍然考虑其原始位置?

转载 作者:行者123 更新时间:2023-11-30 22:31:28 24 4
gpt4 key购买 nike

好吧,假设我有一个矩阵m,如下所示:

m = [[0, 1, 0, 0, 0, 1],
[4, 0, 0, 3, 2, 0],
[0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0]]

我的目标是检查矩阵的每一行,看看该行的总和是否为零。如果总和不为零,我想将与该行对应的列移动到矩阵的末尾。如果该行的总和为零,则不会发生任何情况。因此,在上面给定的矩阵中应该发生以下情况:

  1. 程序发现第 0 行的总和不为零
  2. 将矩阵的第 0 列移至矩阵末尾,如下所示:

    m = [[1, 0, 0, 0, 1, 0],
    [0, 0, 3, 2, 0, 4],
    [0, 0, 0, 0, 0, 0],
    [0, 0, 0, 0, 0, 0],
    [0, 0, 0, 0, 0, 0],
    [0, 0, 0, 0, 0, 0]]
  3. 程序检查下一行并执行相同的操作,将该列移至矩阵的末尾

    m = [[0, 0, 0, 1, 0, 1],
    [0, 3, 2, 0, 4, 0],
    [0, 0, 0, 0, 0, 0],
    [0, 0, 0, 0, 0, 0],
    [0, 0, 0, 0, 0, 0],
    [0, 0, 0, 0, 0, 0]]
  4. 检查其他每一行,但由于它们的总和为零,因此不会进行移位,最终结果是上面的矩阵。

第一次移动矩阵的列后就会出现问题,一旦所有值都移动,就很难判断哪一列对应于正确的行。

我无法使用numpy来解决这个问题,因为我只能使用原始的Python 2库。

最佳答案

使用一个简单的循环,当总和不等于零时,再次循环遍历行,并将弹出的第一项附加到每行。

>>> from pprint import pprint
>>> m = [[0, 1, 0, 0, 0, 1],
[4, 0, 0, 3, 2, 0],
[0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0]]
>>> for row in m:
# If all numbers are >= 0 then we can short-circuit this using `if any(row):`.
if sum(row) != 0:
for row in m:
row.append(row.pop(0))
...
>>> pprint(m)
[[0, 0, 0, 1, 0, 1],
[0, 3, 2, 0, 4, 0],
[0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0]]
<小时/>

list.popO(N) operation ,如果您需要快速的东西,请使用 collections.deque .

关于python - 如何多次移动二维数组的列,同时仍然考虑其原始位置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45808816/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com