Tablice w Pythonie (nie mylić z listami)

Cześć.

Strzelam ślepo, że tej kolekcji w Pythonie nie znasz. I nie jest to dziwne, ponieważ jest spora szansa, że nigdy nie będziesz potrzebował jej używać. Mimo to, wiedza, że taki obiekt istnieje, do czego służy, jakie ma ograniczenia i jakie zalety, może się przydać. Może kiedyś tą wiedzą uratujesz projekt? Ale dość dywagacji, przejdźmy do sedna.

Czym są tablice w Pythonie?

Tablice w Pythonie, a precyzyjniej w CPythonie, to cieniutki wrapper na tablice znane z języka C. Wprost z tego faktu wynika inny fakt: tablice wymagają deklaracji tego, jaki typ danych będą przechowywać. Działa to tak:

1
2
3
4
5
6
7
8
from array import array
from collections.abc import Iterable

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

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

print(isinstance(arr, Iterable)) # True

Czyli pierwszy argument to deklaracja typu, gdzie możliwości są takie:

A próba przekroczenia zdefiniowanego typu skutkuje wyjątkiem:

1
2
3
4
5
6
7
8
9
10
from array import array

arr = array('h', [3658653, 245635])

"""
Traceback (most recent call last):
File "/home/mmazurek/PycharmProjects/tests/c.py", line 3, in <module>
  arr = array('h', [3658653, 245635])
OverflowError: signed short integer is greater than maximum
"""

Więc już na samym początku jest ograniczenie. Wygodne to nie jest, ale nie uprzedzajmy się.

Praca z tablicami

Podstawowy interfejs znany z list jest wspólny dla obu typów, więc część metod działa zgodnie z przewidywaniem:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
from array import array

arr = array('i', [2305, 11243, 86743])

for x in arr:
  print(x)

"""
2305
11243
86743
"""


arr.append(48493)

print(arr) # array('i', [2305, 11243, 86743, 48493])

arr.extend([1, 3, 7])

print(arr) # array('i', [2305, 11243, 86743, 48493, 1, 3, 7])

arr.remove(3)

print(arr) # array('i', [2305, 11243, 86743, 48493, 1, 7])

arr.index(2305) # zwraca 0

Dodatkowo, tak jak listy, są obiektami zmiennymi, zachowują kolejność elementów i pozwalają na duplikaty.


Czekaj, stop!

Podoba Ci się to co tworzę? Jeśli tak to zapraszam Cię do zapisania się na newsletter:

Aby potwierdzić swoją subskrypcję, odbierz pocztę i kliknij w link potwierdzający:) jeśli maila nie ma to poczekaj chwile i/lub sprawdź folder spam/inne/oferty itp :)

Aby potwierdzić swoją subskrypcję, odbierz pocztę i kliknij w link potwierdzający:) jeśli maila nie ma to poczekaj chwile i/lub sprawdź folder spam/inne/oferty itp :)
a w ramach prezentu otrzymasz całkowicie za darmo, dwa dokumenty PDF „6 (nie zawsze oczywistych) błędów popełnianych podczas nauki programowania” który jest jednym z efektów ponad siedmioletniej pracy i obserwacji rozwoju niejednego programisty oraz „Wstęp do testowania w Pythonie”, będący wprowadzeniem do biblioteki PyTest.
Jeśli to Cię interesuje to zapraszam również na swoje social media.

Jak i do ewentualnego postawienia mi kawy :)

Więc kiedy warto użyć tablic zamiast list?

Przede wszystkim wtedy, kiedy jest sens korzystać z ich największej zalety. A tą zaletą jest zużycie pamięci. Tablice, zgodnie z tym co napisałem na samym początku, są cieniutkim wrapperem na odpowiadający im ten sam typ w języku C, więc omijają narzut który dodaje język Python, by uzyskać funkcje dostępne dla list. Zerknij na kod:

1
2
3
4
5
6
7
8
9
10
from array import array
from pympler.asizeof import asizeof

numbers = list(range(0, 10000))

numbers_as_array = array('i', numbers)


print(asizeof(numbers_as_array)) # 40064 B
print(asizeof(numbers)) # 400048 B

Kończąc

Wpis krótki, ale myślę, że ciekawy. Ja osobiście nie miałem nigdy konieczności skorzystania z tego obiektu, ale jestem przekonany, że ta wiedza nie jest bezużyteczna.

Dzięki za wizytę,
Mateusz Mazurek
Mateusz M.

Pokaż komentarze

  • Dziękuję. Zanim zaczęłam uczyć się Pythona, miałam jakieś mgliste pojęcie o tablicach w C. I na początku drogi i nauce o wbudowanych typach obiektów, zastanawiałam się co z tablicami ;D

Ostatnie wpisy

Podsumowanie: luty i marzec 2024

Ostatnio tygodnie były tak bardzo wypełnione, że nie udało mi się napisać nawet krótkiego podsumowanie. Więc dziś zbiorczo podsumuję luty… Read More

1 tydzień ago

Podsumowanie: styczeń 2024

Zapraszam na krótkie podsumowanie miesiąca. Książki W styczniu przeczytałem "Homo Deus: Historia jutra". Książka łudząco podoba do wcześniejszej książki tego… Read More

2 miesiące ago

Podsumowanie roku 2023

Cześć! Zapraszam na podsumowanie roku 2023. Książki Zacznijmy od książek. W tym roku cel 35 książek nie został osiągnięty. Niemniej… Read More

3 miesiące ago

Podsumowanie: grudzień 2023

Zapraszam na krótkie podsumowanie miesiąca. Książki W grudniu skończyłem czytać Mein Kampf. Nudna książka. Ciekawsze fragmenty można by było streścić… Read More

4 miesiące ago

Praca zdalna – co z nią dalej?

Cześć, ostatnio w Internecie pojawiło się dużo artykułów, które nie były przychylne pracy zdalnej. Z drugiej strony większość komentarzy pod… Read More

4 miesiące ago

Podsumowanie: listopad 2023

Zapraszam na krótkie podsumowanie miesiąca. Książki W listopadzie dokończyłem cykl "Z mgły zrodzony" Sandersona. Tylko "Stop prawa" mi nie do… Read More

5 miesięcy ago