Przewodnik po tablicach w Pythonie

Przewodnik po tablicach w Pythonie

Wprowadzenie

Wyobraź sobie, że masz w telefonie listę odtwarzania swoich ulubionych utworów. Ta playlista to lista, na której każdy utwór jest umieszczony w określonej kolejności. Możesz odtworzyć pierwszy utwór, przejść do drugiego, przejść do piątego i tak dalej. Ta lista odtwarzania przypomina tablicę w programowaniu komputerowym.

Tablice są jedną z najbardziej podstawowych i powszechnie używanych struktur danych.

Zasadniczo tablica to uporządkowany sposób przechowywania wielu elementów (takich jak liczby, znaki, a nawet inne tablice) w określonej kolejności, a do dowolnego elementu można szybko uzyskać dostęp, zmodyfikować go lub usunąć, jeśli znasz jego położenie (indeks).

W tym przewodniku przedstawimy kompleksowy przegląd struktury danych tablicowych. Na początek przyjrzyjmy się, czym są tablice i jakie są ich główne cechy. Następnie przejdziemy do świata Pythona, badając, w jaki sposób tablice są implementowane, manipulowane i stosowane w rzeczywistych scenariuszach.

Zrozumienie struktury danych tablicowych

Tablice należą do najstarszych i najbardziej podstawowych struktur danych stosowanych w informatyce i programowaniu. Ich prostota w połączeniu z wydajnością w niektórych operacjach sprawia, że ​​są one podstawowym tematem dla każdego, kto zagłębia się w dziedzinę zarządzania danymi i manipulacji.

Tablica jest zbiorem elementów, zwykle typu taki sam typ, przechowywane w sąsiadujące lokalizacje pamięci.

Ta ciągła pamięć umożliwia tablicom zapewnienie stałego dostępu do dowolnego elementu, biorąc pod uwagę jego indeks. Każdy element tablicy nazywany jest an element, a pozycja elementu w tablicy jest określona przez jego wskaźnik, co zwykle zaczyna się od zera.

Rozważmy na przykład tablicę liczb całkowitych: [10, 20, 30, 40, 50]. Tutaj element 20 ma indeks 1:

indeksowanie tablicy Pythona

Jest wiele Zalety wykorzystania tablic do przechowywania naszych danych. Na przykład, ze względu na układ pamięci, tablice umożliwiają O (1) (stała) złożoność czasowa podczas uzyskiwania dostępu do elementu poprzez jego indeks. Jest to szczególnie korzystne, gdy potrzebujemy losowego dostępu do elementów. Dodatkowo tablice są przechowywane w sąsiadujące lokalizacje pamięci, co może prowadzić do lepszej lokalizacji pamięci podręcznej i ogólnej poprawy wydajności niektórych operacji. Kolejną zauważalną zaletą używania tablic jest to, że ponieważ tablice mają po zadeklarowaniu stały rozmiar, łatwiej jest zarządzać pamięcią i unikać nieoczekiwanych przepełnień lub błędów związanych z brakiem pamięci.

Note: Tablice są szczególnie przydatne w scenariuszach, w których wielkość kolekcji jest znana z góry i pozostaje stałalub gdy dostęp losowy jest częstszy niż wstawianie i usuwanie.

Z drugiej strony tablice mają własny zestaw Ograniczenia. Jednym z głównych ograniczeń tradycyjnych tablic jest ich ustalony rozmiar. Po utworzeniu tablicy nie można zmienić jej rozmiaru. Może to prowadzić do problemów, takich jak marnowanie pamięci (jeśli tablica jest zbyt duża) lub potrzeba zmiany rozmiaru (jeśli tablica jest zbyt mała). Poza tym wstawienie lub usunięcie elementu w środku tablicy wymaga przesunięcia elementów, co prowadzi do Na) złożoność czasową tych operacji.

Podsumowując, zilustrujmy główne cechy tablic na przykładzie listy utworów z początku tego przewodnika. Tablica to struktura danych, która:

  • Jest indeksowany: Podobnie jak każdy utwór na liście odtwarzania ma numer (1, 2, 3,…), każdy element tablicy ma indeks. Jednak w większości języków programowania indeks zaczyna się od 0. Zatem pierwszy element ma indeks 0, drugi – 1 i tak dalej.

  • Ma stały rozmiar: Kiedy tworzysz playlistę dla, powiedzmy, 10 utworów, nie możesz dodać jedenastego utworu bez uprzedniego usunięcia jednego. Podobnie tablice mają stały rozmiar. Po utworzeniu tablicy o określonym rozmiarze nie można dodać więcej elementów, niż wynosi jej pojemność.

  • Jest jednorodny: Wszystkie utwory na Twojej liście odtwarzania to utwory muzyczne. Podobnie wszystkie elementy w tablicy są tego samego typu. Jeśli masz tablicę liczb całkowitych, nie możesz nagle przechowywać w niej ciągu tekstowego.

  • Ma bezpośredni dostęp: Jeśli chcesz posłuchać siódmego utworu na liście odtwarzania, możesz przejść bezpośrednio do niego. Podobnie w przypadku tablic możesz natychmiast uzyskać dostęp do dowolnego elementu, jeśli znasz jego indeks.

  • Pamięć ciągła: To jest trochę bardziej techniczne. Kiedy w pamięci komputera tworzona jest tablica, zajmuje ona ciągły blok pamięci. Pomyśl o tym jak o rzędzie sąsiadujących ze sobą szafek w szkole. Każda szafka znajduje się obok drugiej, bez przerw pomiędzy nimi.

Python i tablice

Python, znany ze swojej elastyczności i łatwości użycia, oferuje wiele sposobów pracy z tablicami. Chociaż Python nie ma natywnej struktury danych tablicowych, jak niektóre inne języki, zapewnia potężne alternatywy, które mogą działać podobnie, a nawet oferować rozszerzone możliwości.

Na pierwszy rzut oka, Lista Pythona może wydawać się synonimem tablicy, ale istnieją subtelne różnice i niuanse, które należy wziąć pod uwagę:

Lista Szyk
Wbudowana struktura danych w języku Python Nie natywne w Pythonie – pochodzą z modułu `array`
Rozmiar dynamiczny Stały (predefiniowany) rozmiar
Może przechowywać elementy różnych typów danych Trzymaj przedmioty tego samego typu
Zapewnij szereg wbudowanych metod manipulacji Należy zaimportować moduły zewnętrzne
O(1) złożoność czasowa operacji dostępu O(1) złożoność czasowa operacji dostępu
Zużywaj więcej pamięci Większa wydajność pamięci

Patrząc na tę tabelę, naturalnie pojawia się pytanie: „Kiedy którego użyć?”. Cóż, jeśli potrzebujesz kolekcji, która może dynamicznie rosnąć lub zmniejszać się i która może przechowywać mieszane typy danych, najlepszym wyborem będzie lista Pythona. Jednakże w scenariuszach wymagających bardziej wydajnej pamięci kolekcji z elementami tego samego typu można rozważyć użycie języka Python array moduł lub biblioteki zewnętrzne, takie jak NumPy.

Połączenia szyk Moduł w Pythonie

Kiedy większość programistów myśli o tablicach w Pythonie, często domyślnie myśli o listach. Jednak Python oferuje bardziej wyspecjalizowaną strukturę tablicową dzięki wbudowanej strukturze array moduł. Moduł ten zapewnia oszczędne przechowywanie podstawowych typów danych w stylu C w Pythonie.

Chociaż listy w Pythonie są niezwykle wszechstronne i mogą przechowywać dowolny typ obiektów, czasami mogą być przesadą, zwłaszcza gdy potrzebujesz przechowywać tylko zbiór podstawowych typów danych, takich jak liczby całkowite lub zmiennoprzecinkowe. The array moduł umożliwia tworzenie tablic, które zużywają więcej pamięci niż listy dla określonych typów danych.

Tworzenie tablicy

Aby użyć array moduł, musisz go najpierw zaimportować:

from array import array

Po zaimportowaniu możesz utworzyć tablicę za pomocą metody array() konstruktor:

arr = array('i', [1, 2, 3, 4, 5])
print(arr)

Tutaj 'i' argument wskazuje, że tablica będzie przechowywać znak liczby całkowite. Dostępnych jest kilka innych kodów typów, np 'f' dla pływaków i 'd' dla dwójek.

Dostęp i modyfikowanie elementów

Możesz uzyskiwać dostęp do elementów tablicy i modyfikować je tak samo, jak w przypadku listy:

print(arr[2]) 

A teraz zmodyfikujmy element, zmieniając jego wartość na 6:

arr[2] = 6
print(arr) 

Metody tablicowe

Połączenia array moduł udostępnia kilka metod manipulowania tablicami:

  • append() – Dodaje element na końcu tablicy:

    arr.append(7)
    print(arr) 
  • extend() – Dołącza na końcu elementy iterowalne:

    arr.extend([8, 9])
    print(arr) 
  • pop() – Usuwa i zwraca element na podanej pozycji:

    arr.pop(2)
    print(arr) 
  • remove(): Usuwa pierwsze wystąpienie określonej wartości:

    arr.remove(2)
    print(arr) 
  • reverse(): Odwraca kolejność tablicy:

    arr.reverse()
    print(arr) 

Uwaga: Metod jest więcej, niż tutaj wymieniliśmy. Patrz oficjalna dokumentacja Pythona aby wyświetlić listę wszystkich dostępnych metod w pliku array moduł.

Podczas array moduł oferuje bardziej wydajny pod względem pamięci sposób przechowywania podstawowych typów danych, ważne jest, aby go zapamiętać Ograniczenia. W przeciwieństwie do list, tablice są jednorodny. Oznacza to, że wszystkie elementy tablicy muszą być tego samego typu. Ponadto możesz tylko przechowywać podstawowe typy danych w stylu C w tablicach. Jeśli chcesz przechowywać niestandardowe obiekty lub inne typy Pythona, będziesz musiał użyć listy lub innej struktury danych.

Tablice NumPy

NumPy, skrót od Numerical Python, to podstawowy pakiet do obliczeń numerycznych w Pythonie. Jedną z jego głównych cech jest jego moc N-wymiarowy obiekt tablicowy, który oferuje szybkie operacje na tablicach, w tym matematyczne, logiczne, manipulację kształtami i nie tylko.

Tablice NumPy są bardziej wszechstronne niż wbudowane w Pythonie array moduł i stanowią podstawę w projektach związanych z analizą danych i uczeniem maszynowym.

Dlaczego warto używać tablic NumPy?

Pierwszą rzeczą, która przychodzi mi do głowy, jest jest gwarancją najlepszej jakości, które mogą dostarczyć Ci Twoje monitory,. Tablice NumPy są zaimplementowane w języku C i pozwalają na wydajne przechowywanie pamięci i szybsze operacje dzięki zoptymalizowanym algorytmom i zaletom ciągłego przechowywania pamięci.

Podczas gdy wbudowane listy i tablice Pythona są jednowymiarowe, tablice NumPy mogą być wielowymiarowy, co czyni je idealnymi do reprezentowania macierzy lub tensorów.

Zapoznaj się z naszym praktycznym, praktycznym przewodnikiem dotyczącym nauki Git, zawierającym najlepsze praktyki, standardy przyjęte w branży i dołączoną ściągawkę. Zatrzymaj polecenia Google Git, a właściwie uczyć się to!

Wreszcie NumPy zapewnia szeroki wachlarz funkcji do operowania na tych tablicach, od podstawowej arytmetyki po zaawansowane operacje matematyczne, przekształcanie, dzielenie i nie tylko.

Uwaga: Jeśli znasz z góry rozmiar danych, wstępne przydzielenie pamięci dla tablic (szczególnie w NumPy) może prowadzić do poprawy wydajności.

Tworzenie tablicy NumPy

Aby korzystać z NumPy, musisz go najpierw zainstalować (pip install numpy), a następnie zaimportuj go:

import numpy as np

Po zaimportowaniu możesz utworzyć tablicę NumPy za pomocą array() funkcjonować:

arr = np.array([1, 2, 3, 4, 5])
print(arr) 

Można także tworzyć tablice wielowymiarowe:

matrix = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
print(matrix)

To da nam:

[[1 2 3] [4 5 6] [7 8 9]]

Oprócz tych podstawowych sposobów tworzenia tablic, NumPy udostępnia nam inne sprytne sposoby tworzenia tablic. Jednym z nich jest arange() metoda. Tworzy tablice z regularnie rosnącymi wartościami:

arr = np.arange(10)
print(arr) 

Kolejny to linspace() metoda, która tworzy tablice o określonej liczbie elementów, rozmieszczonych równomiernie pomiędzy określonymi wartościami początkowymi i końcowymi:

even_space = np.linspace(0, 1, 5)
print(even_space) 

Dostęp i modyfikowanie elementów

Dostęp do elementów tablicy NumPy i ich modyfikowanie jest intuicyjne:

print(arr[2]) arr[2] = 6
print(arr) 

Robię prawie to samo dla tablic wielowymiarowych:

print(matrix[1, 2]) matrix[1, 2] = 10
print(matrix)

Zmieni wartość elementu w drugim wierszu (index 1) i trzecia kolumna (indeks 2):

[[1 2 3] [4 5 20] [7 8 9]]

Zmiana kształtu tablicy

NumPy oferuje wiele funkcji i metod manipulowania tablicami i operacji na nich. Można na przykład użyć reshape() metoda do zmienić kształt tablicy. Powiedzmy, że mamy prostą tablicę:

import numpy as np arr = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12])
print("Original Array:")
print(arr) 

I chcemy przekształcić to w macierz 3×4. Wszystko, co musisz zrobić, to użyć reshape() metoda z żądanymi wymiarami przekazanymi jako argumenty:


reshaped_arr = arr.reshape(3, 4)
print("Reshaped Array (3x4):")
print(reshaped_arr)

Spowoduje to:

Reshaped Array (3x4):
[[ 1 2 3 4] [ 5 6 7 8] [ 9 10 11 12]]

Mnożenie macierzy

Połączenia numpy.dot() stosowana jest metoda mnożenie macierzy. Zwraca iloczyn skalarny dwóch tablic. W przypadku tablic jednowymiarowych jest to produkt wewnętrzny tablic. W przypadku tablic dwuwymiarowych jest to równoważne mnożenie macierzy, a dla ND jest to a produkt sumaryczny nad ostatnią osią pierwszego szyku i przedostatnią osią drugiego szyku.

Zobaczmy jak to działa. Najpierw obliczmy iloczyn skalarny dwóch tablic 1-D (iloczyn wewnętrzny wektorów):

import numpy as np vec1 = np.array([1, 2, 3])
vec2 = np.array([4, 5, 6])
dot_product_1d = np.dot(vec1, vec2) print("Dot product of two 1-D arrays:")
print(dot_product_1d) 

Spowoduje to:

Dot product of two 1-D arrays:
32

32 jest w rzeczywistości iloczynem wewnętrznym dwóch tablic – (14 + 25 + 3*6). Następnie możemy wykonać mnożenie macierzy dwóch tablic 2-D:


mat1 = np.array([[1, 2], [3, 4]])
mat2 = np.array([[2, 0], [1, 3]])
matrix_product = np.dot(mat1, mat2) print("Matrix multiplication of two 2-D arrays:")
print(matrix_product) 

Co da nam:

Matrix multiplication of two 2-D arrays:
[[ 4 6] [10 12]]

Tablice NumPy stanowią znaczący krok naprzód w stosunku do wbudowanych list Pythona i array moduł, zwłaszcza do obliczeń naukowych i matematycznych. Ich wydajność w połączeniu z bogatą funkcjonalnością, jaką zapewnia biblioteka NumPy, czyni z nich niezastąpione narzędzie dla każdego, kto chce wykonywać operacje numeryczne w Pythonie.

Wnioski

Tablice, kamień węgielny informatyki i programowania, wielokrotnie dowiodły swojej wartości w różnych aplikacjach i domenach. W Pythonie ta podstawowa struktura danych, poprzez różne jej wcielenia, takie jak listy, array moduł i potężne tablice NumPy oferują programistom połączenie wydajności, wszechstronności i prostoty.

W tym przewodniku przeszliśmy od podstawowych koncepcji tablic do ich praktycznych zastosowań w języku Python. Widzieliśmy, jak tablice ze swoją ciągłą pamięcią zapewniają krótki czas dostępu i jak listy dynamiczne Pythona zapewniają dodatkową warstwę elastyczności. Zagłębiliśmy się także w wyspecjalizowany świat NumPy, w którym tablice przekształcają się w potężne narzędzia do obliczeń numerycznych.

Znak czasu:

Więcej z Nadużycie stosu