Listy w Pythonie

Listy w Pythonie to struktury danych, które pozwalają przechowywać zbiory elementów w określonej kolejności. Są dynamiczne, co oznacza, że ich rozmiar może się zmieniać w czasie działania programu, i mogą przechowywać elementy różnych typów. Listy są jednymi z najczęściej używanych struktur danych w Pythonie ze względu na ich elastyczność i bogaty zestaw metod.

Podstawowe cechy list w Pythonie

Dynamiczny rozmiar

Listy w Pythonie mogą zmieniać swój rozmiar w trakcie działania programu. Oznacza to, że można do nich dodawać nowe elementy (np. za pomocą metod takich jak append() czy extend()) lub usuwać istniejące (np. używając remove()pop(), lub del), bez konieczności wcześniejszego określania ich długości. Dzięki temu listy są bardzo elastyczne i idealne do przechowywania dynamicznych zbiorów danych.

Indeksowanie

Listy są indeksowane od 0, co oznacza, że pierwszy element ma indeks 0, drugi 1, itd. Python obsługuje również indeksowanie ujemne, które pozwala odwoływać się do elementów od końca listy (-1 to ostatni element, -2 przedostatni, itd.). Dzięki temu można łatwo i szybko uzyskać dostęp do dowolnego elementu.

Heterogeniczność

W jednej liście można przechowywać elementy różnych typów. Na przykład, w jednej liście można mieć liczby całkowite (int), liczby zmiennoprzecinkowe (float), napisy (str), a nawet inne listy, słowniki czy obiekty. Ta cecha czyni listy uniwersalnym narzędziem do organizacji danych.

example_list = [42, "hello", 3.14, [1, 2, 3]]

Mutowalność

Listy są strukturami danych mutowalnymi, co oznacza, że po ich utworzeniu można zmieniać zawartość bez konieczności tworzenia nowej listy. Możesz modyfikować istniejące elementy, dodawać nowe lub usuwać istniejące. Oto kilka przykładów:

Modyfikacja elementu

my_list = [1, 2, 3]
my_list[0] = 10  # Teraz my_list to [10, 2, 3]

Dodawanie elementu

my_list.append(4)  # Teraz my_list to [10, 2, 3, 4]

Usuwanie elementu

my_list.pop(1)  # Usuwa element o indeksie 1 (wartość 2)

Wsparcie dla zaawansowanych operacji

Listy obsługują różnorodne operacje, takie jak

Slicing (wycinanie)

Umożliwia tworzenie nowych list na podstawie podzbioru elementów z oryginalnej listy.

my_list = [0, 1, 2, 3, 4, 5]
sliced = my_list[1:4]  # Wynik: [1, 2, 3]

Iteracje

Listy można łatwo przechodzić za pomocą pętli for

for item in my_list:
    print(item)

Wbudowane funkcje

len()

Zwraca liczbę elementów w liście.

my_list = [1, 2, 3]
print(len(my_list))  # Wynik: 3

min() i max()

Zwracają najmniejszy i największy element w liście.

numbers = [10, 5, 8]
print(min(numbers))  # Wynik: 5
print(max(numbers))  # Wynik: 10

sum()

Zwraca sumę wszystkich elementów w liście (dotyczy list z liczbami).

numbers = [1, 2, 3]
print(sum(numbers))  # Wynik: 6

sorted()

Zwraca nową listę z posortowanymi elementami oryginalnej listy.

numbers = [3, 1, 2]
print(sorted(numbers))  # Wynik: [1, 2, 3]

reversed()

Zwraca iterator z odwróconą kolejnością elementów listy.

my_list = [1, 2, 3]
print(list(reversed(my_list)))  # Wynik: [3, 2, 1]

enumerate()

Zwraca iterator, który generuje pary indeks-wartość dla elementów listy.

my_list = ['a', 'b', 'c']
for index, value in enumerate(my_list):
    print(index, value)
# Wynik:
# 0 a
# 1 b
# 2 c

map()

Zastosowuje podaną funkcję do każdego elementu listy, zwracając iterator z wynikami.

numbers = [1, 2, 3]
squared = map(lambda x: x**2, numbers)
print(list(squared))  # Wynik: [1, 4, 9]

filter()

Zwraca iterator z elementami listy, które spełniają warunek określony w funkcji.

numbers = [1, 2, 3, 4]
even = filter(lambda x: x % 2 == 0, numbers)
print(list(even))  # Wynik: [2, 4]

zip()

Łączy elementy z dwóch lub więcej list w pary (krotki), tworząc iterator.

list1 = [1, 2, 3]
list2 = ['a', 'b', 'c']
combined = zip(list1, list2)
print(list(combined))  # Wynik: [(1, 'a'), (2, 'b'), (3, 'c')]

any() i all()

any() zwraca True, jeśli przynajmniej jeden element listy jest prawdziwy, a all() zwraca True, jeśli wszystkie elementy są prawdziwe.

bool_list = [True, False, True]
print(any(bool_list))  # Wynik: True
print(all(bool_list))  # Wynik: False

Wsparcie dla zagnieżdżania

Listy mogą przechowywać inne listy, co pozwala na tworzenie struktur wielowymiarowych, takich jak macierze czy złożone hierarchie danych.

nested_list = [[1, 2], [3, 4], [5, 6]]
print(nested_list[1][1])  # Wynik: 4

Wydajność

Listy w Pythonie są zaimplementowane jako dynamiczne tablice, co oznacza, że operacje takie jak dostęp do elementu za pomocą indeksu są bardzo szybkie (czas O(1)). Dodawanie elementów na końcu jest również wydajne, ale usuwanie lub wstawianie elementów w środku listy może wymagać przesuwania pozostałych elementów, co ma czas O(n).

Możliwość wykorzystania zaawansowanych narzędzi

Python udostępnia różne techniki do operacji na listach, takie jak list comprehension (tworzenie list w jednej linii):

squares = [x**2 for x in range(5)]  # Wynik: [0, 1, 4, 9, 16]

Zewnętrzne biblioteki przydatne do pracy z listami

NumPy

Biblioteka do obliczeń numerycznych, oferująca efektywne operacje na tablicach wielowymiarowych (ndarray), które mogą zastępować listy w zaawansowanych obliczeniach.

import numpy as np
array = np.array([1, 2, 3])
print(array * 2)  # Wynik: [2 4 6]

Pandas

Biblioteka do analizy danych, umożliwiająca tworzenie struktur danych takich jak Series (jednowymiarowe) i DataFrame (dwuwymiarowe), które rozszerzają funkcjonalność standardowych list.

import pandas as pd
series = pd.Series([1, 2, 3])
print(series.mean())  # Wynik: 2.0

itertools

Moduł standardowej biblioteki Pythona oferujący narzędzia do pracy z iteracjami, takie jak generowanie permutacji, kombinacji czy nieskończonych sekwencji.

import itertools
for combination in itertools.combinations([1, 2, 3], 2):
    print(combination)
# Wynik:
# (1, 2)
# (1, 3)
# (2, 3)

collections

Moduł standardowej biblioteki Pythona zawierający specjalne typy danych, takie jak deque (dwustronna kolejka), Counter (licznik elementów) czy defaultdict (słownik z domyślną wartością), które mogą być użyteczne w zaawansowanej pracy z listami.

from collections import Counter
counts = Counter([1, 2, 2, 3, 3, 3])
print(counts)  # Wyn