Historia pytania: Slicing pojawił się w Pythonie od samego początku jako składniowo wygodny sposób uzyskiwania fragmentów sekwencji bez ręcznego przeszukiwania w pętli.
Problem: Programiści przychodzący z innych języków często używają jawnych pętli do pracy z podlistami. To zwiększa objętość i obniża wydajność kodu.
Rozwiązanie: List slicing pozwala na uzyskanie części listy, napisu lub innych sekwencji w sposób zwięzły, zrozumiały i efektywny. Slicing nie modyfikuje oryginalnego obiektu, a zwraca jego kopię lub widok (dla niektórych typów).
Przykład kodu:
lst = [0, 1, 2, 3, 4, 5] sub = lst[1:4] # [1, 2, 3] reverse = lst[::-1] # [5, 4, 3, 2, 1, 0] every_second = lst[::2] # [0, 2, 4]
Kluczowe cechy:
Czy zmiana wartości w slice wpływa na oryginalną listę?
Nie: kiedy przypisujesz nową listę slice, zmieniasz oryginalną listę w tych pozycjach; jednak przy pobieraniu slice otrzymujesz nową listę.
Przykład:
lst = [1, 2, 3, 4] lst2 = lst[1:3] # [2, 3] lst2[0] = 20 # Nie wpływa na lst: lst2 — nowy obiekt
Jednakże:
lst[1:3] = [7, 8] # to bezpośrednio zmienia lst
Jak działa slicing z ujemnymi wartościami indeksów?
Ujemne indeksy są liczone od końca: -1 to ostatni element, -2 to przedostatni. Na przykład, lst[:-1] oznacza wszystkie elementy oprócz ostatniego.
Co się stanie, jeśli wyjdziesz poza granice listy w slice?
Python mądrze obsługuje takie przypadki: nie będzie błędu, po prostu slicing zostanie przycięty do dostępnych granic. Na przykład, lst[100:200] da pustą listę lub maksymalnie możliwy podzbiór.
Przetwarzanie listy zajmuje setki linijek kodu z zagnieżdżonymi pętlami i warunkami do „przecięcia” danych wejściowych, kod jest skomplikowany i wolny.
Zalety:
Wady:
Ten sam kod przepisany z użyciem slicing i wbudowanych funkcji, zajmuje mniej linii kodu, łatwo go testować.
Zalety:
Wady: