podczas krojenia w pytona, z pominięciem części end
plasterka (czyli koniec w list[:end:]
) powoduje end
jest określona jako „rozmiar łańcucha, przy czym plastry”. *Dlaczego lista [:: - 1] nie równa się [: len (lista): - 1]?
to jednak nie wydaje się prawdziwe w przypadku korzystania z step
argument (STEP w list[::step]
) w plasterka, przynajmniej gdy step
argument jest -1
. Prosty przykład:
>>> l = [1, 2, 3]
>>> l[::-1]
[3, 2, 1]
>>> l[:len(l):-1]
[]
Oznacza to, że w przypadku step
argumentu podjęcia, pominiętym wartość end
jest nie równoważne wyraźnie przepuszczanie rozmiar obiektu, przy czym plastry.
Być może jest to po prostu błąd mojej lektury dokumentacji, ale chciałbym zrozumieć, dlaczego powyższy przykład wydaje się przeczyć dokumentacji Pythona o pominięciu wartości w plasterkach, a najlepiej tam, gdzie jest to udokumentowane.
* Slice indices have useful defaults; an omitted first index defaults to zero, an omitted second index defaults to the size of the string being sliced.
'l [len (l) :: - 1]' to '[3, 2, 1]'. Początek jest końcem, kiedy cofasz się. –
zatrzymanie jest teraz ustawione na trzeci indeks, gdy łańcuch jest odwrócony o krok -1, natychmiast osiąga się zatrzymanie. Dlatego zwraca pustą listę –
Fragment dokumentacji jest niepoprawny. Ma zastosowanie tylko wtedy, gdy krok jest dodatni. W rzeczywistości nie ma żadnej wartości całkowitej, która odpowiada wartości domyślnej dla indeksu stop, gdy krok wynosi -1, ponieważ logicznie będzie wynosił -1, z wyjątkiem tego, że ma specjalne znaczenie dla Pythona. Musisz użyć 'None', aby uzyskać pożądany indeks. To błąd w notacji plastra. –