de-vraag
  • Pytania
  • Tagi
  • Użytkownicy
Powiadomienia
Nagrody
Rejestracja
Po zarejestrowaniu się, będziesz otrzymywać powiadomienia o odpowiedziach i komentarzach do swoich pytań.
Zaloguj się
Brak tłumaczeń pasujących do Twojego wyszukiwania Jeśli masz już konto, zaloguj się, aby sprawdzić nowe powiadomienia.
Za dodane pytania, odpowiedzi i komentarze przewidziane są nagrody.
Więcej
Źródło
Edytuj
 Simon
Simon
Question

Rozumienie notacji plasterków

Potrzebuję dobrego wyjaśnienia (referencje są plusem) na temat notacji Pythona's slice.

Dla mnie ta notacja potrzebuje trochę podnieść.

Wygląda na niezwykle potężny, ale nie całkiem mam głowę wokół niego.

2992 2009-02-03T22:31:02+00:00 3
 kmario23
kmario23
Edytowane pytanie 8. maja 2019 в 4:03
Programowanie
python
list
slice
iterable
Popular videos
Sobotnie skarby złomowisko vlog - palnik CCCP , Prehistoryczne AGD , Przetwornica 3000W
Sobotnie skarby złomowisko vlog - palnik CCCP , Prehistoryczne AGD , Przetwornica 3000W
3 miesiące temu
Oczami Mistrzów (Notacje Archiwalne SFP) - Stanisław Jędryka
Oczami Mistrzów (Notacje Archiwalne SFP) - Stanisław Jędryka
5 lat temu
Prof. Ryszard Tadeusiewicz – notacja z okazji 100-lecia AGH
Prof. Ryszard Tadeusiewicz – notacja z okazji 100-lecia AGH
3 lata temu
Przejrzyj na oczy
Przejrzyj na oczy
3 miesiące temu
NAKŁADANIE GŁADZI WAŁKIEM / ROTBAND FINISH / LEKTOR
NAKŁADANIE GŁADZI WAŁKIEM / ROTBAND FINISH / LEKTOR
3 miesiące temu
Mateusz Chrzonstowski | Moje rozumienie DDD (+ clean architecture) | #66 Talk4Devs
Mateusz Chrzonstowski | Moje rozumienie DDD (+ clean architecture) | #66 Talk4Devs
1 rok temu
PLASTER MIODU. Psalm 44: Różnica
PLASTER MIODU. Psalm 44: Różnica
5 lat temu
Jak Bezpiecznie Używać Noża Do Tapet ? | ForumWiedzy
Jak Bezpiecznie Używać Noża Do Tapet ? | ForumWiedzy
5 lat temu
Inteligencja pierwotniaków: bez mózgu, bez neuronów, w jednej komórce | Łukasz Lamża
Inteligencja pierwotniaków: bez mózgu, bez neuronów, w jednej komórce | Łukasz Lamża
3 lata temu
Pianobeton pod styropiany, wyrównanie chudziaka i stropu Wrocław - Termolit
Pianobeton pod styropiany, wyrównanie chudziaka i stropu Wrocław - Termolit
1 rok temu
Jak rozmierzyć płytki w łazience?
Jak rozmierzyć płytki w łazience?
10 miesięcy temu
Czym jest kwant i  fizyka(mechanika) kwantowa? Proste wyjaśnienie
Czym jest kwant i fizyka(mechanika) kwantowa? Proste wyjaśnienie
2 lata temu
4Developers 2020, Sławomir Sobótka, Bottega IL: Poznaj swoje granice - o odkrywaniu granic (...)
4Developers 2020, Sławomir Sobótka, Bottega IL: Poznaj swoje granice - o odkrywaniu granic (...)
1 rok temu
Vavr By Example by Grzegorz Piwowarek
Vavr By Example by Grzegorz Piwowarek
4 lata temu
Jak wychodzi druga warstwa Semin Proliss do lampy smugowej?
Jak wychodzi druga warstwa Semin Proliss do lampy smugowej?
3 miesiące temu
« Poprzedni
Następny »
To pytanie ma 1 odpowiedź w języku angielskim, aby je przeczytać zaloguj się na swoje konto.
Solution / Answer
Greg Hewgill
Greg Hewgill
3. lutego 2009 в 10:48
2009-02-03T22:48:24+00:00
Więcej
Źródło
Edytuj
#8795380

To naprawdę proste:

a[start:stop]  # items start through stop-1
a[start:]      # items start through the rest of the array
a[:stop]       # items from the beginning through stop-1
a[:]           # a copy of the whole array

Istnieje również wartość step, która może być używana z każdym z powyższych:

a[start:stop:step] # start through not past stop, by step

Kluczowym punktem do zapamiętania jest to, że wartość :stop reprezentuje pierwszą wartość, która nie znajduje się w wybranym wycinku. Tak więc, różnica pomiędzy stop a start jest liczbą wybranych elementów (jeśli step wynosi 1, domyślnie).

Inną cechą jest to, że start lub stop może być liczbą ujemną, co oznacza, że liczy się od końca tablicy zamiast od jej początku. A więc:

a[-1]    # last item in the array
a[-2:]   # last two items in the array
a[:-2]   # everything except the last two items

Podobnie, step może być liczbą ujemną:

a[::-1]    # all items in the array, reversed
a[1::-1]   # the first two items, reversed
a[:-3:-1]  # the last two items, reversed
a[-3::-1]  # everything except the last two items, reversed

Python jest łaskawy dla programisty, jeśli jest mniej elementów, niż się o nie prosi. Na przykład, jeśli poprosisz o a[:-2], a a zawiera tylko jeden element, otrzymasz pustą listę zamiast błędu. Czasami wolałbyś błąd, więc musisz być świadomy, że może się to zdarzyć.

Relacja do obiektu slice()

Operator krojenia [] jest w rzeczywistości używany w powyższym kodzie z obiektem slice() używając notacji : (która jest ważna tylko wewnątrz []), tzn:

a[start:stop:step]

jest równoważne z:

a[slice(start, stop, step)]

Obiekty slice również zachowują się nieco inaczej w zależności od liczby argumentów, podobnie jak w przypadku range(), tzn. obsługiwane są zarówno slice(stop) jak i slice(start, stop[, krok]). Aby pominąć specyfikację danego argumentu, można użyć None, tak więc np. a[start:] jest równoważne a[slice(start, None)] lub a[::-1] jest równoważne a[slice(None, None, -1)].

Podczas gdy notacja oparta na : jest bardzo pomocna przy prostym krojeniu, jawne użycie obiektów slice() upraszcza programowe generowanie krojenia.

Greg Hewgill
Greg Hewgill
Edytowana odpowiedź 24. lutego 2019 в 7:26
4067
0
Hans Nowak
Hans Nowak
3. lutego 2009 в 10:49
2009-02-03T22:49:04+00:00
Więcej
Źródło
Edytuj
#8795381

Tutorial Pythona]1 mówi o tym (przewiń trochę w dół, aż dojdziesz do części o krojeniu).

Diagram ASCII art jest również pomocny w zapamiętaniu, jak działają plasterki:

 +---+---+---+---+---+---+
 | P | y | t | h | o | n |
 +---+---+---+---+---+---+
 0   1   2   3   4   5   6
-6  -5  -4  -3  -2  -1

Jednym ze sposobów zapamiętania jak działają plasterki jest myślenie o indeksach jako wskazujących między znakami, z lewą krawędzią pierwszego znaku oznaczoną numerem 0. Następnie prawa krawędź ostatniego znaku ciągu n znaków ma indeks n.

 kenorb
kenorb
Edytowana odpowiedź 18. września 2017 в 11:02
3. An Informal Introduction to Python — Python 3.10.4 documentation
docs.python.org
510
0
 ephemient
ephemient
3. lutego 2009 в 11:08
2009-02-03T23:08:22+00:00
Więcej
Źródło
Edytuj
#8795382

Wyliczenie możliwości, na jakie pozwala gramatyka:

>>> seq[:]                # [seq[0],   seq[1],          ..., seq[-1]    ]
>>> seq[low:]             # [seq[low], seq[low+1],      ..., seq[-1]    ]
>>> seq[:high]            # [seq[0],   seq[1],          ..., seq[high-1]]
>>> seq[low:high]         # [seq[low], seq[low+1],      ..., seq[high-1]]
>>> seq[::stride]         # [seq[0],   seq[stride],     ..., seq[-1]    ]
>>> seq[low::stride]      # [seq[low], seq[low+stride], ..., seq[-1]    ]
>>> seq[:high:stride]     # [seq[0],   seq[stride],     ..., seq[high-1]]
>>> seq[low:high:stride]  # [seq[low], seq[low+stride], ..., seq[high-1]]

Oczywiście, jeśli (high-low)%stride != 0, to punkt końcowy będzie nieco niżej niż high-1.

Jeśli stride jest ujemny, to kolejność jest nieco zmieniona, ponieważ odliczamy w dół:

>>> seq[::-stride]        # [seq[-1],   seq[-1-stride],   ..., seq[0]    ]
>>> seq[high::-stride]    # [seq[high], seq[high-stride], ..., seq[0]    ]
>>> seq[:low:-stride]     # [seq[-1],   seq[-1-stride],   ..., seq[low+1]]
>>> seq[high:low:-stride] # [seq[high], seq[high-stride], ..., seq[low+1]]

Rozszerzone krojenie (z przecinkami i elipsami) są w większości używane tylko przez specjalne struktury danych (jak NumPy); podstawowe sekwencje ich nie obsługują.

>>> class slicee:
...     def __getitem__(self, item):
...         return repr(item)
...
>>> slicee()[0, 1:2, ::5, ...]
'(0, slice(1, 2, None), slice(None, None, 5), Ellipsis)'
 Georgy
Georgy
Edytowana odpowiedź 7. maja 2019 в 12:16
393
0
Dodaj pytanie
Kategorie
Wszystkie
Technologia
Kultura / Rekreacja
Życie / Sztuka
Nauka
Profesjonalny
Biznes
Użytkownicy
Wszystkie
Nowy
Popularny
1
365
Zarejestrowany 1 dzień temu
2
True Image
Zarejestrowany 1 dzień temu
3
archana agarwal
Zarejestrowany 3 dni temu
4
Maxim Zhilyaev
Zarejestrowany 6 dni temu
5
adambotsfford adambotsfford
Zarejestrowany 1 tydzień temu
BG
DE
EL
ES
FR
ID
IT
JA
KO
LV
NL
PL
PT
RU
TR
ZH
© de-vraag 2022
Źródło
stackoverflow.com
na podstawie licencji cc by-sa 3.0 z przypisaniem