在Python 2D数组中交换两个索引

时间:2020-11-02 18:34:32

标签: python arrays

我编写了如下函数:

def change_value(array):
    for i in range(len(array)):
        for j in range(len(array[i])):
            if array[i][j]==0:
                array[i][j],array[0][0]= array[0][0],array[i][j]
            print(array[i][j],end=' ')
        print()
array=[[1,2,3],[4,0,6],[7,8,5]]
change_value(array)

此函数在接收到数组后交换两个所需索引的值。 但是输出如下:

1 2 3
4 1 6
7 8 5

该问题的解决方案是什么?

2 个答案:

答案 0 :(得分:0)

问题是您要随手打印每个值-位置(1,1)处的零值已经打印出了第0行,该行在以后的迭代中将交换值。

解耦交换代码和打印代码:

def change_value(array):
    for i in range(len(array)):
        for j in range(len(array[i])):
            if array[i][j] == 0:
                array[i][j], array[0][0] = array[0][0], array[i][j]


def print_array(array):
    for row in array:
        for cell in row:
            print(cell, end=" ")
        print()


array = [[1, 2, 3], [4, 0, 6], [7, 8, 5]]
print_array(array)
print("===")
change_value(array)
print_array(array)

答案 1 :(得分:0)

虽然AKX解决方案是正确的,但请注意,解决该问题的Python方法是

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

array[mask], array[0, 0] = array[0, 0], array[mask]
print(array)
相关问题