multiplicação de lista python por números e geração de lista

Prefácio

O problema que descobri ao gerar um array bidimensional hoje é principalmente a diferença entre objetos mutáveis ​​e objetos imutáveis.

1 Ao gerar uma matriz unidimensional:

array1 = [0]*5
array2 = [0 for i in range(5)]
print('1', array1, '\n', '2', array2)
1 [0, 0, 0, 0, 0] 
 2 [0, 0, 0, 0, 0]
Faça uma certa modificação
array1[2] = 8
array2[2] = 8
print('1', array1, '\n', '2', array2)
1 [0, 0, 8, 0, 0] 
 2 [0, 0, 8, 0, 0]

Percebe-se que as modificações geradas nesses dois métodos são basicamente as mesmas.

2 Ao gerar uma matriz bidimensional, insira diretamente o código

row = 4
col = 4
array1 = [[0 for i in range(col)] for j in range(row)]
array2 = [[0]*col] * row
print('1', array1, '\n', '2', array2)
array1[2][2] = 8
array2[2][2] = 8
print('1', array1, '\n', '2', array2)
1 [[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]] 
 2 [[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]
1 [[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 8, 0], [0, 0, 0, 0]] 
 2 [[0, 0, 8, 0], [0, 0, 8, 0], [0, 0, 8, 0], [0, 0, 8, 0]]

Pode-se observar que quando usamos a multiplicação para gerar uma lista bidimensional a partir de uma lista unidimensional, alterar uma posição alterará a posição da terceira coluna de cada linha, porém, usando a fórmula de geração de lista, ela atende aos nossos requisitos e altera apenas o número na terceira linha e terceira coluna.

analisar:

Uma matriz unidimensional usa multiplicação para gerar diretamente uma matriz bidimensional. Seu objeto é uma lista, que é um objeto variável. Cada linha da matriz bidimensional gerada aponta para o mesmo objeto, portanto, alterar uma causará alterações. Este princípio é semelhante ao mecanismo de cópia python e cópia profunda. Ao gerar um array unidimensional, os números são objetos imutáveis, portanto, modificações em uma posição não afetarão os valores em outras posições.
Referência: link .

おすすめ

転載: blog.csdn.net/qq_44897728/article/details/117364796