Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/364.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在仍考虑其原始位置的情况下多次移动二维数组的列? 好的,请考虑我有一个矩阵 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]] 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]]_Python_Python 2.7_Matrix_Multidimensional Array - Fatal编程技术网

Python 如何在仍考虑其原始位置的情况下多次移动二维数组的列? 好的,请考虑我有一个矩阵 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]] 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]]

Python 如何在仍考虑其原始位置的情况下多次移动二维数组的列? 好的,请考虑我有一个矩阵 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]] 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]],python,python-2.7,matrix,multidimensional-array,Python,Python 2.7,Matrix,Multidimensional Array,我的目标是检查矩阵的每一行,看那一行的和是否为零。如果总和不是零,我想将对应于该行的列移动到矩阵的末尾。如果行的和为零,则什么也不会发生。因此,在上述给定矩阵中,应出现以下情况: 程序发现第0行的和不等于零 矩阵的第0列移到矩阵的末尾,如下所示: 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列移到矩阵的末尾,如下所示:

    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]]
    
    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]]
    
  • 程序检查下一行并执行相同的操作,将列移动到矩阵的末尾

    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]]
    
  • 其他每一行都会被检查,但由于它们的总和都为零,因此不会进行移位,最终结果就是上面的矩阵

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


    我不能使用
    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.pop
    是,如果您需要快速操作,请使用。

    deque
    可以旋转元素

    from collections import deque
    
    def rotate(matrix):
    
        matrix_d = [deque(row) for row in matrix]
    
        for row in matrix:
    
            if sum(row) != 0:
    
                for row_d in matrix_d:
    
                    row_d.rotate(-1)
    
        return [list(row) for row in matrix_d]
    

    很好,这太好了,谢谢你。我不知道这样一个显而易见的解决办法是怎么逃过我的。正如你可能知道的,我仍然是一个新手程序员。特别感谢您如此快速地回答(4分钟,哇!)使用
    deque
    @stamaimer的时间几乎是一样的。转换为deque可能会减慢速度。如果我们从deque本身开始,那么它应该会更快。虽然对于小列表,它几乎不会被注意到。有趣的是,我将对此进行研究。