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: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.
Mateusz Mazurek
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
I tablice się znalazły ;D ciesze się bardzo!