Metoda 1a
# Pierwszy sposób na utworzenie tablicy 1D
N
=
5
arr
=
[
0
]
*
N
print
(arr)
Dane wyjściowe:
[0, 0, 0, 0, 0]
Metoda 1b
N
=
5
arr
=
[
0
for
i
in
range
(N)]
print
(arr)
Wyjście:
[0, 0, 0, 0, 0 ]
Rozszerzając powyższe, możemy zdefiniować tablice 2-wymiarowe w następujący sposób.
Metoda 2a
# Użycie powyższej pierwszej metody do utworzenia
# tablica 2D
wiersze, kolumny
=
(
5
,
5
)
arr
=
[[
0
]
*
cols]
*
wiersze
print
(arr)
Wyjście:
[[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]]
Metoda 2b
# Użycie powyższej drugiej metody do utworzenia
# tablicy 2D
wierszy, cols
=
(
5
,
5
)
arr
=
[[
0
for
i
in
range
(cols)]
for
j
w
zakres
(wiersze)]
print
(arr)
Dane wyjściowe: 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]]
Obie metody wydają się dawać taki sam wynik jak teraz. Zamieńmy jeden z elementów w tablicy metody 2a i metody 2b.
# Program w języku Python 3, aby zademonstrować, jak to działa
# metoda 1 i metoda 2.
rows , cols
=
(
5
,
5
)
# metoda 2a
arr
=
[[
0
]
*
cols]
*
wiersze
# zmień pierwszy element
# pierwszy wiersz do 1 i wypisz tablicę
arr [
0
] [
0
]
=
1
for
wiersz
in
arr:
print
(wiersz)
# wypisuje następujące
# [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]
# metoda 2b
arr
=
[[
0
for
i
w
range
(cols)]
for
j
w
zakres
(wiersze)]
# powrót do nowej tablicy umożliwia zmianę
# pierwszy element pierwszego wiersza
# do 1 i wydrukuj tablicę
arr [
0
] [
0
]
=
1
for
wiersz
in
arr:
print
(wiersz)
# wypisuje następujące dane zgodnie z oczekiwaniami
# [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]
Wyjście:
[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]
Oczekujemy tylko pierwszego elementu pierwsza linia zmieni się na 1, ale pierwszy element każdej linii zmieni się na 1 w metodzie 2a. Ten rodzaj działania wynika z faktu, że Python używa płytkich list, które postaramy się zrozumieć.
W metodzie 1a Python nie tworzy 5 obiektów całkowitych, ale tworzy tylko jeden obiekt całkowity, a wszystkie indeksy tablicy arr wskazują na ten sam obiekt int, co pokazano.
Jeśli przypiszemy 0-ty indeks do innej liczby całkowitej, powiedzmy 1, wówczas tworzony jest nowy obiekt typu integer o wartości 1, a następnie 0-ty indeks wskazuje teraz na ten nowy obiekt int, jak pokazano poniżej
Podobnie, gdy tworzymy dwuwymiarową tablicę, taką jak" arr = [[0] * cols] * row " , w rzeczywistości rozszerzamy powyższą analogię.
1. Tworzony jest tylko jeden obiekt całkowity.
2. Tworzona jest jedna lista 1d, a wszystkie jej indeksy wskazują na ten sam obiekt int w punkcie 1.
3. Teraz przyp. [0], przyp. [1], przyp. [2]‚ʶ. arr [n-1] wszystkie wskazują na ten sam obiekt listy powyżej w kroku 2.
Powyższe ustawienie można zwizualizować na poniższym obrazku.
Teraz zmieńmy pierwszy element w pierwszym wierszu" arr "jako
arr [0] [0] = 1
=" arr [0] wskazuje na ten sam obiekt listy, który utworzyliśmy powyżej (pamiętaj, że arr [1], arr [2]– arr [n-1] również wskazują na ten sam obiekt listy)
= & gt ; Przypisanie arr [0] [0] stworzy nowy obiekt int o wartości 1, a arr [0] [0] będzie teraz wskazywał na ten nowy obiekt int. (A więc będzie to arr [1] [0], arr [2] [0] – arr [n-1] [0])
Widać to wyraźnie na poniższym obrazku .
Kiedy tablice 2d są tworzone w ten sposób, zmiana wartości „Ę” w pewnym wierszu będą miały wpływ na wszystkie łańcuchy, ponieważ zasadniczo istnieje tylko jeden obiekt całkowity i tylko jeden obiekt listy, do którego odwołują się wszystkie wiersze w tablicy.
Jak można się spodziewać, wyśledź błędy spowodowane użyciem płytkich list. skomplikowany. Dlatego najlepszym sposobem zadeklarowania tablicy 2d jest
wiersze, kolumny
=
(
5
,
5
)
arr
=
[[
0
for
i
w
zakresie
(kolumny)]
for
j
in
zakres
(wiersze )]
Wyjście:
Ta metoda tworzy 5 oddzielnych obiektów listy w przeciwieństwie do metody 2a. Jednym ze sposobów sprawdzenia tego — użyj operatora "is", który sprawdza, czy dwa operandy odnoszą się do tego samego obiektu.
Wyjście: Fałsz Prawda Python | Korzystanie z tablic/list 2D we właściwy sposób Arrays: QuestionsPython | Korzystanie z tablic/list 2D we właściwy sposób exp: QuestionsShopLatest questions Wiki |