簡體   English   中英

交換 Python 2D 數組中的兩個索引

[英]Swap two indices in Python 2D array

我寫了一個函數如下:

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

這個問題的解決方案是什么?

問題是您正在打印每個值 - 在位置 (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)

雖然 AKX 解決方案是正確的,但請注意,解決問題的 Pythonic 方法是

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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM