Python | Korzystanie z tablic/list 2D we właściwy sposób

| | | | | |

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

# Drugi sposób tworzenia tablicy 1 D

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:

[[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.


wiersze, kolumny = ( 5 , 5 )

# metoda 2b

arr = [[ 0 for i in range ( cols)] for j in zakres (wiersze)]


# sprawdź, czy arr [0] i arr [1] odnoszą się do
# ten sam obiekt

print (arr [ 0 ] to arr [ 1 ] ) # prints False


# metoda 2a

arr = [[ 0 ] * cols] * wiersze


# sprawdź, czy arr [0] i arr [1] odnoszą się do
# ten sam e obiekt
# wypisuje True, ponieważ istnieje tylko jedna
# lista obiektów do utworzenia.

print (arr [ 0 ] is arr [ 1 ])

Wyjście:

Fałsz Prawda 

Python | Korzystanie z tablic/list 2D we właściwy sposób Arrays: Questions

Python | Korzystanie z tablic/list 2D we właściwy sposób exp: Questions

Shop

Best Python online courses for 2022

$

Best laptop for Fortnite

$

Best laptop for Excel

$

Best laptop for Solidworks

$

Best laptop for Roblox

$

Best computer for crypto mining

$

Best laptop for Sims 4

$

Best laptop for Zoom

$499

Latest questions

NUMPYNUMPY

psycopg2: insert multiple rows with one query

12 answers

NUMPYNUMPY

How to convert Nonetype to int or string?

12 answers

NUMPYNUMPY

How to specify multiple return types using type-hints

12 answers

NUMPYNUMPY

Javascript Error: IPython is not defined in JupyterLab

12 answers

Wiki

Python OpenCV | cv2.putText () method

numpy.arctan2 () in Python

Python | os.path.realpath () method

Python OpenCV | cv2.circle () method

Python OpenCV cv2.cvtColor () method

Python - Move item to the end of the list

time.perf_counter () function in Python

Check if one list is a subset of another in Python

Python os.path.join () method