2.2.6.4 Mutowalne obiekty sekwencyjne

Listy obsługują dodatkowe operacje, które pozwalają na modyfikację obiektu "w miejscu" (bez potrzeby generowania nowego obiektu Inne mutowalne typy sekwencyjne (kiedy takowe zostaną dodane do języka) również powinny obsługiwać wymienione operacje. Napisy i krotki są sekwencjami niemutowalnymi - takie obiekty nie mogą zostać bezpośrednio zmodyfikowane. Następujące operacje są zdefiniowane dla mutowalnych typów sekwencyjnych (x jest dowolnym obiektem):  

Operacja  Wynik  Uwagi 
s[i] = x element i sekwencji s jest zastąpiony przez x  
s[i:j] = t wycinek sekwencji s od pozycji i do j jest zastąpiony przez t  
del s[i:j] równoważne s[i:j] = []  
s.append(x) równoważne s[len(s):len(s)] = [x] (1)
s.extend(x) równoważne s[len(s):len(s)] = x (2)
s.count(x) zwraca ilość indeksów i takich, że s[i] == x  
s.index(x) zwraca najmniejszy indeks i taki, że s[i] == x (3)
s.insert(i, x) równoważne s[i:i] = [x] jeśli i >= 0 (4)
s.pop([i]) równoważne x = s[i]; del s[i]; return x (5)
s.remove(x) równoważne del s[s.index(x)] (3)
s.reverse() odwrócenie elementów s "w miejscu" (6)
s.sort([cmpfunc]) sortowanie elementów s "w miejscu" (6), (7), (8), (9)
   Uwagi:

(1)
Implementacja Pythona w C w przeszłości akceptowała stosowanie wielu parametrów łączonych automatycznie w postać krotki. Użycie tego niefortunnego mechanizmu zostało przedawnione w wersji 1.4 Pythona a od wersji 2.0 taka próba zakończy się błędem.

(2)
Wywołuje wyjątek jeśli x nie jest obiektem iterowanym.

(3)
Wywołuje ValueError jeśli x nie zostanie znaleziony w s.

(4)
W przypadku, gdy jako pierwszy parametr metody insert() zostanie użyta liczba ujemna, nowy element zostanie dołączony na końcu sekwencji.

(5)
Metoda pop() jest obsługiwana przez listy i obiekty klasy array. Opcjonalny argument i posiada wartość domyślna równą -1, tak aby domyślnie był zwracany i usuwany ostatni element.

(6)
W celu zaoszczędzenia pamięci w przypadku list zawierających wiele elementów metody sort() i reverse() modyfikują listy "w miejscu". Aby dotkliwiej uświadomić ten "efekt uboczny" metody te nie zwracają list wynikowych.

(7)
Metoda sort() przyjmuje opcjonalny argument dodatkowy definiujący funkcję porównującą dwa argumenty (elementy listy), która powinna zwracać liczbę ujemną, zero lub liczbe dodatnią w zależności od tego, czy pierwszy argument jest odpowiednio mniejszy, równy lub większy od drugiego. Należy mieć świadomość, że taka operacja znacznie spowalnia proces sortowania, to znaczy aby posortować listę w odwrotnej kolejności znacznie optymalniej jest użyć standardowe metody sort() i reverse(), niż zastosować metodę sort() z własną funkcją sortującą odwracającą kolejność elementów.

(8)
Wymóg stabilności metody sort() nie jest narzucony w definicji języka (sortowanie jest stabilne w przypadku, gdy nie zmienia wzajemnej kolejności elementów, które są równe w wyniku porównania). W implementacjach sortowania (napisanych w C) w Pythonie do wersji 2.2 operacje te były stabilne przez czysty przypadek. W wersji 2.3 Pythona wprowadzono nową implementację metody sort() napisaną w C, która z założenia ma stabilne działanie. Zakłada się jednak, że kod tworzony z myślą o przenośności pomiędzy różnymi wersjami języka nie powinien zakładać stabilności operacji sortowania.

(9)
Podczas operacji sortowania próba zmiany zawartości lub nawet przeglądania listy może dać nieprzewidywalne rezultaty. Implementacja w C od wersji 2.3 powoduje, że lista podczas sortowania wydaje się być pusta. W przypadku, gdy zostanie wykryta próba zmiany zawartości listy podczas operacji sortowania, zostanie wywołany wyjątek ValueError.

Zajrzyj do Informacji na temat tej publikacji... aby pomóc w jej rozwoju.