Método 1a
# Primeira maneira de criar array 1 D
N
=
5
arr
=
[
0
]
*
N
print
(arr)
Saída:
[0, 0, 0, 0, 0]
Método 1b
# Segunda maneira de criar array 1 D
N
=
5
arr
=
[
0
para
i
em
intervalo
(N)]
print
(arr)
Sair:
[0, 0, 0, 0, 0 ]
Estendendo o acima, podemos definir arrays bidimensionais das seguintes maneiras.
Método 2a
# Usando o primeiro método acima para criar
# array 2D
linhas, colunas
=
(
5
,
5
)
arr
=
[[
0
]
*
cols]
*
linhas
print
(arr)
Sair:
[[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étodo 2b
# Usando o segundo método acima para criar
# array 2D
linhas, cols
=
(
5
,
5
)
arr
=
[[
0
para
i
em
intervalo
(colunas)]
for
j
em
intervalo
(linhas)]
print
(arr)
Saída: b >
[[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]]
Ambos os métodos parecem dar o mesmo resultado que agora. Vamos substituir um dos elementos no array do método 2a e do método 2b.
# Programa Python 3 para demonstrar como funciona
# método 1 e método 2.
linhas , colunas
=
(
5
,
5
)
# método 2a
arr
=
[[
0
]
*
cols]
*
linhas
# altera a primeira element
# primeira linha para 1 e imprima o array
arr [
0
] [
0
]
=
1
para
linha
em
arr:
print
(linha)
# gera o seguinte
# [1, 0, 0, 0, 0]
# [1, 0, 0, 0, 0]
# [1, 0, 0, 0, 0]
# [1, 0, 0, 0, 0]
# [1, 0, 0, 0, 0]
# método 2b
arr
=
[[
0
para
i
em
intervalo
(colunas)]
for
j
em
intervalo
(linhas)]
# de volta para este novo array permite que você altere
# primeiro elemento da primeira linha
# para 1 e imprima o array
arr [
0
] [
0
]
=
1
para
linha
em
arr:
print
(linha)
# gera o seguinte como esperado
# [1, 0, 0, 0, 0]
# [0, 0, 0, 0, 0]
# [0, 0, 0, 0, 0]
# [0, 0, 0, 0, 0]
# [0, 0, 0, 0, 0]
Sair:
[1, 0, 0, 0, 0] [1, 0, 0, 0, 0] [1 , 0, 0 , 0, 0] [1, 0, 0, 0, 0] [1, 0, 0, 0, 0] [1, 0, 0, 0, 0] [0, 0, 0, 0 , 0] [ 0, 0, 0, 0, 0] [0, 0, 0, 0, 0] [0, 0, 0, 0, 0]
Esperamos apenas o primeiro elemento de a primeira linha mudará para 1, mas o primeiro elemento de cada linha mudará para 1 no método 2a. Esse tipo de funcionamento se deve ao fato de Python usar listas superficiais, que tentaremos entender.
No método 1a, Python não cria 5 objetos inteiros, mas cria apenas um objeto inteiro, e todos os índices do array arr apontam para o mesmo objeto int mostrado.
Se atribuirmos o índice 0 a outro inteiro, digamos 1, um novo objeto inteiro será criado com o valor 1 e o índice 0 agora apontará para esse novo objeto int, conforme mostrado abaixo
Da mesma forma, quando criamos um array bidimensional como" arr = [[0] * cols] * row " , na verdade estamos expandindo a analogia acima.
1. Apenas um objeto inteiro é criado.
2. Uma lista 1d é criada e todos os seus índices apontam para o mesmo objeto int no ponto 1.
3. Agora arr [0], arr [1], arr [2]…. arr [n-1] todos apontam para o mesmo objeto de lista acima na etapa 2.
A configuração acima pode ser visualizada na imagem abaixo.
Agora vamos alterar o primeiro elemento na primeira linha" arr "as
arr [0] [0] = 1
=" arr [0] aponta para o mesmo objeto de lista que criamos acima (lembre-se que arr [1], arr [2]‚Ķ arr [n-1] também aponta para o mesmo objeto de lista)
= & gt ; A atribuição de arr [0] [0] criará um novo objeto int com um valor de 1, e arr [0] [0] agora apontará para esse novo objeto int. (E assim será arr [1] [0], arr [2] [0]‚Ķ arr [n-1] [0])
Isso pode ser visto claramente na imagem abaixo .
Então, quando arrays 2d são criados dessa maneira, alterando os valores ‚Äã‚Äãem uma determinada linha afetarão todas as strings, pois existe essencialmente apenas um objeto inteiro e apenas um objeto de lista referenciado por todas as linhas na matriz.
Como seria de esperar, rastreie erros causados por este uso de listas superficiais. complicado. Portanto, a melhor maneira de declarar um array 2d é
rows, cols
=
(
5
,
5
)
arr
=
[[
0
para
i
em
intervalo
(cols)]
para
j
em
intervalo
(rows )]
Exit:
Este método cria 5 objetos de lista separados em oposição ao método 2a. Uma maneira de verificar este — use o operador "is", que verifica se dois operandos se referem ao mesmo objeto.
Sair: Falso Verdadeiro ShopLatest questions Wiki |