Π Π°Π·Π½ΠΎΠ΅

Π‘Ρ€Π΅Π· списка python: Всё, Ρ‡Ρ‚ΠΎ Π’Ρ‹ Ρ…ΠΎΡ‚Π΅Π»ΠΈ Π·Π½Π°Ρ‚ΡŒ ΠΎ слайсах / Π₯Π°Π±Ρ€

Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠ°Π½ΠΈΠ΅

Всё, Ρ‡Ρ‚ΠΎ Π’Ρ‹ Ρ…ΠΎΡ‚Π΅Π»ΠΈ Π·Π½Π°Ρ‚ΡŒ ΠΎ слайсах / Π₯Π°Π±Ρ€

МалСнькоС вступлСниС. Π£Π²Π΅Ρ€Π΅Π½, Ρ‡Ρ‚ΠΎ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ, ΠΊΡ‚ΠΎ использовал ΠΏΠΈΡ‚ΠΎΠ½ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ врСмя, полюбил выраТСния Π² ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½Ρ‹Ρ… скобочках. Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ я Ρ…ΠΎΡ‡Ρƒ ΠΎΡ‚ Β«Π°Β» Π΄ΠΎ «я» Ρ€Π°ΡΡΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΎ срСзах. Для Π½Π°Ρ‡Π°Π»Π° Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΎ Ρ‚Π΅Ρ€ΠΌΠΈΠ½ΠΎΠ»ΠΎΠ³ΠΈΠΈ: Π² английском языкС ΠΈΡ… Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ Β«sliceΒ». Π― Π±ΡƒΠ΄Ρƒ Π½Π°Π·Ρ‹Π²Π°Ρ‚ΡŒ ΠΈΡ… Ρ‚ΠΎ «слайсами», Ρ‚ΠΎ «срСзами», ΠΊΠ°ΠΊ Π² ΠΌΠΎΠ΅ΠΌ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠΈ этого слова. Π‘ΡƒΠ΄Π΅ΠΌ всС ΡƒΡ‡ΠΈΡ‚ΡŒΡΡ Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°Ρ…. Для мСня, Ρ‚Π°ΠΊΠΎΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ Π±Ρ‹Π» Π±Ρ‹ самым ΡƒΠ΄ΠΎΠ±Π½Ρ‹ΠΌ, быстрым ΠΈ простым.
Для Π½Π°Ρ‡Π°Π»Π°, самоС распространСнноС ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅. Боздания ΠΊΠΎΠΏΠΈΠΈ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΈΠ»ΠΈ Π΅Π΅ части.
Рассмотрим срСз ΠΊΠ°ΠΊ Ρ‡Π°ΡΡ‚ΡŒ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ. НапримСр, нСсколько срСзов со списка:

>>> s = [1, 2, 3, 4, 6] #простой список
>>> s[:] #копия списка, часто ΠΎΡ‡Π΅Π½ΡŒ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ
[1, 2, 3, 4, 6]
>>> s[1:] # всС элСмСнты ΠΊΡ€ΠΎΠΌΠ΅ ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ
[2, 3, 4, 6]
>>> s[-3:] # послСдниС 3 элСмСнта
[3, 4, 6]
>>> s[2:-2] #ΠΎΡ‚ΠΊΠΈΠ΄Ρ‹Π²Π°Π΅ΠΌ ΠΏΠ΅Ρ€Π²Ρ‹Π΅ ΠΈ послСдниС 2
[3]

Π­Ρ‚ΠΎ Π΅Ρ‰Ρ‘ Π½Π΅ всС,
Π”Π°Π»Π΅ΠΊΠΎ Π½Π΅ всС Π·Π½Π°ΡŽΡ‚, Π½ΠΎ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ слайсы с трСмя ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌΠΈ:

>>> s[::2] #ΠΏΠ°Ρ€Π½Ρ‹Π΅ элСмСнты
[1, 3, 6]
>>> s[1:4:2] #элСмСнты с ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ ΠΏΠΎ Ρ‡Π΅Ρ‚Π²Π΅Ρ€Ρ‚Ρ‹ΠΉ с шагом 2
[2, 4]

ВсС эти дСйствия ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΎΠ²ΠΎΡ€Π°Ρ‡ΠΈΠ²Π°Ρ‚ΡŒ со строками, ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠ°ΠΌΠΈ ΠΈ списками.

>>> "Hello Dolly!"[1::2]
'el ol!'

БовсСм Π·Π°Π±Ρ‹Π», спасибо xeningem:

>>> "God saw I was dog"[::-1]
'god saw I was doG'
>>> #ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ шаг ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ граблями, Ссли Π½Π΅ Π·Π½Π°Ρ‚ΡŒ особСнностСй. Π‘ΠΌ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ.

Но ΠΈ это Π΅Ρ‰Ρ‘ Π½Π΅ всС, Π΅ΡΡ‚ΡŒ нСсколько дСйствий со срСзами, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠΆΠ½ΠΎ Π΄Π΅Π»Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ со списками (Π½Ρƒ, ΠΏΠΎΡ‡Ρ‚ΠΈ). Π”Π΅Π»ΠΎ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΈ СдинствСнныС ΠΈΠ· Π±Π°Π·ΠΎΠ²Ρ‹Ρ… ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚Π΅ΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ, ΠΈ, для ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ…, ΠΈΠΌΠ΅Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ порядок (нСльзя Π΄Π΅Π»Π°Ρ‚ΡŒ срСзы ΠΈΠ· словарСй ΠΈ мноТСств/Π½Π°Π±ΠΎΡ€ΠΎΠ²). Π”Π°Π»ΡŒΡˆΠ΅ ΠΏΠΎΠΉΠ΄Π΅Ρ‚ Ρ€Π°Π·Π³ΠΎΠ²ΠΎΡ€ ΠΎ срСзах, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠ·ΠΌΠ΅Π½ΡΡŽΡ‚ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ.
Блайсы ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠ΄Π°Π»ΡΡ‚ΡŒ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

>>> s = list(range(10)) #заполняСм 0..9
>>> del s[3: -2: 2] #удаляСм элСмСнты ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ‚Ρ€Π΅Ρ‚ΡŒΠΈΠΌ ΠΈ прСдпослСдним с шагом 2
>>> s
[ 0, 1, 2, 4, 6, 8, 9]

Π•Ρ‰Ρ‘ ΠΌΠΎΠΆΠ½ΠΎ Π²ΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ элСмСнты:
Π’ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π΅ Π·Π°ΠΌΠ΅Π½Ρ‹:

>>> s[2:5:2]=list("AF") #список Π±Ρ‹Π» [0, 1, 2, 4, 6, 8, 9], ΠΌΡ‹ Π·Π°ΠΌΠ΅Π½ΠΈΠ»ΠΈ ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹Π΅ элСмСнты Π½Π° [β€˜A’,’F’]
>>> #Π΄Π°, Π΅Ρ‰Ρ‘ Π² Ρ‚Π°ΠΊΠΎΠΉ конструкции Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΡΠΎΠ²ΠΏΠ°Π΄Π°Ρ‚ΡŒ Ρ€Π°Π·ΠΌΠ΅Ρ€Ρ‹, это Π»Π΅Π³Ρ‡Π΅ ΠΏΠΎΠ½ΡΡ‚ΡŒ ΠΏΠΎΠΏΡ€ΠΎΠ±ΠΎΠ²Π°Π²
>>> s
[ 0, 1, 'A', 4, 'F', 8, 9]

Ну, ΠΈΠ»ΠΈ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ вставки ΠΏΠΎΠΏΡ€ΠΎΡ‰Π΅:

>>> s[3:4] = ["4 was here"] # Π·Π°ΠΌΠ΅Π½Π° ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ кусочка
>>> s
[ 0, 1, 'A', '4 was here', 'F', 8, 9]
>>> s[1:1] = ["after zero"] #ΠΈΠ»ΠΈ, просто, вставка
>>> s
[ 0, 'after zero', 1, 'A', '4 was here', 'F', 8, 9]

Если ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ класс, с ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ½ΠΈΠΌΠ°Ρ‚ΡŒ срСзы? ΠŸΡ€ΠΎΡ‰Π΅ Π½Π΅ΠΊΡƒΠ΄Π°, для этого Π΅ΡΡ‚ΡŒ Π΄Π²Π° ΠΏΡƒΡ‚ΠΈ:
ΠΠ΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΉ:
1) ΠŸΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Ρ„ΡƒΠ½Ρ†ΠΈΠΈ __getslice__, __delslice__ ΠΈ __setslice__. Но это ΡƒΡΡ‚Π°Ρ€Π΅Π²ΡˆΠΈΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ (Π² 2.0 ΠΏΠΎΠΌΠ΅Ρ‡Π΅Π½ ΠΊΠ°ΠΊ deprecated)
И ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΉ:
2) ΠŸΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ __getitem__, __setitem__ ΠΈ __delitem__.
Π‘ ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ взгляда всС каТСтся ΠΏΡ€Π΅Π΄Π΅Π»ΡŒΠ½ΠΎ простым, Π½ΠΎ Ссли ΠΏΡ€ΠΈΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒΡΡ, Ρ‚ΠΎ __getitem__(self, key) – ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€, key, Π° Ρƒ срСза Ρƒ нас ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Ρ†Π΅Π»Ρ‹Ρ… 3 числа… ВсС ΠΏΡ€Π΅Π΄Π΅Π»ΡŒΠ½ΠΎ просто: Π² случаС, ΠΊΠΎΠ³Π΄Π° ΠΊΡ‚ΠΎ-Ρ‚ΠΎ пытаСтся ΡΡ€Π΅Π·Π°Ρ‚ΡŒ кусочСк ΠΎΡ‚ нашСго ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ key функция ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Ρ‚ΠΈΠΏΠ° slice:

>>> class MySliceble():
    def __getitem__(self, key):
        if isinstance(key, slice):
            return list(range(key.start, key.stop, key.step))
        else:
            raise Exception("Trying to access by index")
>>> my = MySliceble()
>>> my[2:10:1]
[2, 3, 4, 5, 6, 7, 8, 9]

ΠšΠΎΠ½Π΅Ρ‡Π½ΠΎ, ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΎΡ‡Π΅Π½ΡŒ символичСский, Π½ΠΎ ΠΏΠΎΠ½ΡΡ‚ΡŒ ΠΌΠΎΠΆΠ½ΠΎ: Ρƒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° класса slice Π΅ΡΡ‚ΡŒ Ρ‚Ρ€ΠΈ свойства: start, stop ΠΈ step, ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‚ числам ΠΈΠ· скобок срСза. НуТно Π±Ρ‹Ρ‚ΡŒ Π²Π½ΠΈΠΌΠ°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ, Ссли число ΠΏΡ€ΠΎΠΏΡƒΡ‰Π΅Π½Π°, Ρ‚ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ None, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ [::] Π±ΡƒΠ΄Π΅Ρ‚ slice(None, None, None) Π° [:-3] Π±ΡƒΠ΄Π΅Ρ‚ slice(None, -3, None).
Π—Π°ΠΌΠ΅Π½Ρƒ/вставку ΠΈ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ срСзов Π΄Π΅Π»Π°Π΅ΠΌ ΠΏΠΎ Π°Π½Π°Π»ΠΎΠ³ΠΈΠΈ.
Как ΡƒΠΏΡ€Π°ΠΆΠ½Π΅Π½ΠΈΠ΅, ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠΎΠΏΡ€ΠΎΠ±ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ ΡΠ»ΠΎΠ²Π°Ρ€ΡŒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ с Π½Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ Π΄Π΅Π»Π°Ρ‚ΡŒ срСзы. Π’ ΠΏΠΈΡ‚ΠΎΠ½Π΅3 это Π±ΡƒΠ΄Π΅Ρ‚ Π½Π°Ρ‡ΠΈΠ½Π°Ρ‚ΡŒΡΡ ΠΊΠ°ΠΊ class SliceableDict(dict):
Ну, Π²Ρ€ΠΎΠ΄Π΅ всС, Ρ‡Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ ΠΎ срСзах.
Если Ρ‡Ρ‚ΠΎ пропустил с ΡƒΠ΄ΠΎΠ²ΠΎΠ»ΡŒΡΡ‚Π²ΠΈΠ΅ΠΌ Π²Ρ‹ΡƒΡ‡Ρƒ ΠΈ Π΄ΠΎΠΏΠΈΡˆΡƒ.

Upd1: Π½Π°ΠΊΠΎΠΏΠΈΠ» 5 ΠΊΠ°Ρ€ΠΌΡ‹, пСрСнСс Π² ΠΏΠΈΡ‚ΠΎΠ½ΠΈΠΉ Π±Π»ΠΎΠ³. Бпасибо.

Upd2: Бпасибо Π·Π° ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ, исправился, Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΠ».

ПониманиС Π½ΠΎΡ‚Π°Ρ†ΠΈΠΈ срСза Python

ΠΎΡ‚Π²Π΅Ρ‚Ρ‹ Π²Ρ‹ΡˆΠ΅ Π½Π΅ ΠΎΠ±ΡΡƒΠΆΠ΄Π°ΡŽΡ‚ Π½Π°Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ срСза. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ½ΡΡ‚ΡŒ Π½Π°Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ срСза, ΠΏΠΎΠ»Π΅Π·Π½ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π΅Ρ‰Π΅ ΠΎΠ΄Π½Ρƒ ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΡŽ Π² искусство ascii:

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

>>> p = ['P','y','t','h','o','n']
# Why the two sets of numbers: 
# indexing gives items, not lists
>>> p[0]
 'P'
>>> p[5]
 'n'
# slicing gives lists
>>> p[0:1]
 ['P']
>>> p[0:2]
 ['P','y']

ΠΎΠ΄Π½Π° эвристика, для срСза ΠΎΡ‚ нуля Π΄ΠΎ n, ΠΏΠΎΠ΄ΡƒΠΌΠ°ΠΉΡ‚Π΅: «Π½ΠΎΠ»ΡŒ-это Π½Π°Ρ‡Π°Π»ΠΎ, Π½Π°Ρ‡Π½ΠΈΡ‚Π΅ с Π½Π°Ρ‡Π°Π»Π° ΠΈ Π²ΠΎΠ·ΡŒΠΌΠΈΡ‚Π΅ n элСмСнтов Π² спискС».

>>> p[5] # the last of six items, indexed from zero
 'n'
>>> p[0:5] # does NOT include the last item!
 ['P','y','t','h','o']
>>> p[0:6] # not p[0:5]!!!
 ['P','y','t','h','o','n']

другая эвристика: «Π΄Π»Ρ любого срСза Π·Π°ΠΌΠ΅Π½ΠΈΡ‚Π΅ Π½Π°Ρ‡Π°Π»ΠΎ Π½ΡƒΠ»Π΅ΠΌ, ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚Π΅ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΡƒΡŽ эвристику, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΊΠΎΠ½Π΅Ρ† списка, Π° Π·Π°Ρ‚Π΅ΠΌ подсчитайтС ΠΏΠ΅Ρ€Π²ΠΎΠ΅ число Π΄ΠΎ ΠΎΡ‚Ρ€Π΅ΠΆΡŒΡ‚Π΅ ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚Ρ‹ ΠΎΡ‚ Π½Π°Ρ‡Π°Π»Π°»

>>> p[0:4] # start at the beginning and count out 4 items
 ['P','y','t','h']
>>> p[1:4] # take one item off the front
 ['y','t','h']
>>> p[2:4] # take two items off the front
 ['t','h']
# etc.

ΠΏΠ΅Ρ€Π²ΠΎΠ΅ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ назначСния срСза Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ с Π½Π°Ρ€Π΅Π·ΠΊΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ список, Π½Π°Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ список (ΠΈΠ»ΠΈ Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄):

>>> p[2:3]
 ['t']
>>> p[2:3] = ['T']
>>> p
 ['P','y','T','h','o','n']
>>> p[2:3] = 't'
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: can only assign an iterable

Π²Ρ‚ΠΎΡ€ΠΎΠ΅ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ назначСния срСза, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π²Ρ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ Π²Ρ‹ΡˆΠ΅, Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ любая Ρ‡Π°ΡΡ‚ΡŒ списка возвращаСтся индСксированиСм срСза, это Ρ‚Π° ΠΆΠ΅ Ρ‡Π°ΡΡ‚ΡŒ, которая измСняСтся Π½Π°Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ срСза:

>>> p[2:4]
 ['T','h']
>>> p[2:4] = ['t','r']
>>> p
 ['P','y','t','r','o','n']

Ρ‚Ρ€Π΅Ρ‚ΡŒΠ΅ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ Π½Π°Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ срСза Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π½Ρ‹ΠΉ список (iterable) Π½Π΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΈΠΌΠ΅Ρ‚ΡŒ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΡƒΡŽ Π΄Π»ΠΈΠ½Ρƒ; индСксированный срСз просто вырСзаСтся ΠΈ замСняСтся массово Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ назначаСтся:

>>> p = ['P','y','t','h','o','n'] # start over
>>> p[2:4] = ['s','p','a','m']
>>> p
 ['P','y','s','p','a','m','o','n']

самая слоТная Ρ‡Π°ΡΡ‚ΡŒ, ΠΊ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π½ΡƒΠΆΠ½ΠΎ ΠΏΡ€ΠΈΠ²Ρ‹ΠΊΠ½ΡƒΡ‚ΡŒ, — это Π½Π°Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ пустых срСзов. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ эвристику 1 ΠΈ 2, Π»Π΅Π³ΠΊΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π³ΠΎΠ»ΠΎΠ²Ρƒ Π²ΠΎΠΊΡ€ΡƒΠ³ индСксации пустой Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚:

>>> p = ['P','y','t','h','o','n']
>>> p[0:4]
 ['P','y','t','h']
>>> p[1:4]
 ['y','t','h']
>>> p[2:4]
 ['t','h']
>>> p[3:4]
 ['h']
>>> p[4:4]
 []

ΠΈ Π·Π°Ρ‚Π΅ΠΌ, ΠΊΠ°ΠΊ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π²Ρ‹ это ΡƒΠ²ΠΈΠ΄Π΅Π»ΠΈ, Π½Π°Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ срСза пустому срСзу ΠΈΠΌΠ΅Π΅Ρ‚ смысл Ρ‚ΠΎΠΆΠ΅:

>>> p = ['P','y','t','h','o','n']
>>> p[2:4] = ['x','y'] # assigned list is same length as slice
>>> p 
 ['P','y','x','y','o','n'] # result is same length
>>> p = ['P','y','t','h','o','n']
>>> p[3:4] = ['x','y'] # assigned list is longer than slice
>>> p 
 ['P','y','t','x','y','o','n'] # result is longer
>>> p = ['P','y','t','h','o','n']
>>> p[4:4] = ['x','y']
>>> p
 ['P','y','t','h','x','y','o','n'] # result is longer still

ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΌΡ‹ Π½Π΅ мСняСм Π²Ρ‚ΠΎΡ€ΠΎΠΉ Π½ΠΎΠΌΠ΅Ρ€ срСза (4), вставлСнныС элСмСнты всСгда ΡΠΊΠ»Π°Π΄Ρ‹Π²Π°ΡŽΡ‚ΡΡ прямо ΠΏΡ€ΠΎΡ‚ΠΈΠ² «o», Π΄Π°ΠΆΠ΅ ΠΊΠΎΠ³Π΄Π° ΠΌΡ‹ Π½Π°Π·Π½Π°Ρ‡Π°Π΅ΠΌ пустой срСз. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, позиция для назначСния пустого срСза являСтся логичСским Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ΠΌ ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΉ для нСпустых Π½Π°Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ срСза.

Ρ€Π΅Π·Π΅Ρ€Π²Π½ΠΎΠ΅ ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ происходит, ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Π΅Ρ‚Π΅ ΠΈΠ΄Ρ‚ΠΈ с нашСй процСссиСй подсчСта Π»ΠΎΠΌΡ‚ΠΈΠΊΠ° Π½Π°Ρ‡Π°Π»ΠΎ?

>>> p = ['P','y','t','h','o','n']
>>> p[0:4]
 ['P','y','t','h']
>>> p[1:4]
 ['y','t','h']
>>> p[2:4]
 ['t','h']
>>> p[3:4]
 ['h']
>>> p[4:4]
 []
>>> p[5:4]
 []
>>> p[6:4]
 []

с Π½Π°Ρ€Π΅Π·ΠΊΠΎΠΉ, ΠΊΠ°ΠΊ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π²Ρ‹ Π·Π°ΠΊΠΎΠ½Ρ‡ΠΈΡ‚Π΅, Π²Ρ‹ Π·Π°ΠΊΠΎΠ½Ρ‡ΠΈΡ‚Π΅; ΠΎΠ½ Π½Π΅ Π½Π°Ρ‡ΠΈΠ½Π°Π΅Ρ‚ Π½Π°Ρ€Π΅Π·Π°Ρ‚ΡŒ Π½Π°Π·Π°Π΄. Π’ Python Π²Ρ‹ Π½Π΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅ ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… шагов, Ссли Π²Ρ‹ явно Π½Π΅ попроситС ΠΈΡ…, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ число.

>>> p[5:3:-1]
 ['n','o']

Π΅ΡΡ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ странныС послСдствия для ΠΏΡ€Π°Π²ΠΈΠ»Π° «ΠΊΠ°ΠΊ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π²Ρ‹ Π·Π°ΠΊΠΎΠ½Ρ‡ΠΈΡ‚Π΅, Π²Ρ‹ Π·Π°ΠΊΠΎΠ½Ρ‡ΠΈΡ‚Π΅»:

>>> p[4:4]
 []
>>> p[5:4]
 []
>>> p[6:4]
 []
>>> p[6]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IndexError: list index out of range

Π½Π° самом Π΄Π΅Π»Π΅, ΠΏΠΎ ΡΡ€Π°Π²Π½Π΅Π½ΠΈΡŽ с индСксированиСм, Π½Π°Ρ€Π΅Π·ΠΊΠ° python являСтся странным Π΄ΠΎΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒΡΡ‚Π²ΠΎΠΌ ошибки:

>>> p[100:200]
 []
>>> p[int(2e99):int(1e99)]
 []

это ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΈΠ³ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ ΠΈΠ½ΠΎΠ³Π΄Π° Π½ΠΎ это Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ привСсти ΠΊ нСсколько странному повСдСнию:

>>> p
 ['P', 'y', 't', 'h', 'o', 'n']
>>> p[int(2e99):int(1e99)] = ['p','o','w','e','r']
>>> p
 ['P', 'y', 't', 'h', 'o', 'n', 'p', 'o', 'w', 'e', 'r']

Π² зависимости ΠΎΡ‚ вашСго прилоТСния, Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚… ΠΈΠ»ΠΈ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π½Π΅… Π±ΡƒΠ΄ΡŒ Ρ‚Π΅ΠΌ, Π½Π° Ρ‡Ρ‚ΠΎ Ρ‚Ρ‹ надСялся!

НиТС ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ тСкст ΠΌΠΎΠ΅Π³ΠΎ ΠΏΠ΅Ρ€Π²ΠΎΠ½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΎΡ‚Π²Π΅Ρ‚Π°, ΠΎΠ½ Π±Ρ‹Π» ΠΏΠΎΠ»Π΅Π·Π΅Π½ ΠΌΠ½ΠΎΠ³ΠΈΠΌ людям, поэтому я Π½Π΅ Ρ…ΠΎΡ‚Π΅Π» Π΅Π³ΠΎ ΡƒΠ΄Π°Π»ΡΡ‚ΡŒ.

>>> r=[0,1,2,3,4]
>>> r[1:1]
[]
>>> r[1:1]=[9,8]
>>> r
[1, 9, 8, 2, 3, 4]
>>> r[1:1]=['blah']
>>> r
[1, 'blah', 9, 8, 2, 3, 4]

это Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΎΡΡΠ½ΠΈΡ‚ΡŒ Ρ€Π°Π·Π½ΠΈΡ†Ρƒ ΠΌΠ΅ΠΆΠ΄Ρƒ Π½Π°Ρ€Π΅Π·ΠΊΠΎΠΉ ΠΈ индСксированиСм.

ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ² ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ элСмСнтов списков

На этом занятии рассмотрим нСсколько Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ² ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ элСмСнтов списков.

Π Π°Π·Π±ΠΈΠ²ΠΊΠ° Ρ†Π΅Π»ΠΎΠ³ΠΎ ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ числа ΠΏΠΎ Ρ†ΠΈΡ„Ρ€Π°ΠΌ

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π½Π° Python Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

x = int(input("Π’Π²Π΅Π΄ΠΈΡ‚Π΅ Ρ†Π΅Π»ΠΎΠ΅ ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ число: "))
digs = []
while x:
Β Β Β  digs.append(x%10)Β Β  #Π±Π΅Ρ€Π΅ΠΌ послСднюю Ρ†ΠΈΡ„Ρ€Ρƒ числа
Β Β Β  x = x//10Β Β Β Β Β Β Β Β Β Β  #отбрасываСм послСднюю Ρ†ΠΈΡ„Ρ€Ρƒ числа
print(digs)

Π§Ρ‚ΠΎΠ±Ρ‹ Ρ†ΠΈΡ„Ρ€Ρ‹ шли
ΠΏΠΎ порядку: слСва-Π½Π°ΠΏΡ€Π°Π²ΠΎ, ΠΌΡ‹ ΠΈΡ… Π±ΡƒΠ΄Π΅ΠΌ Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ Π² Π½Π°Ρ‡Π°Π»ΠΎ списка:

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°, ΠΌΠ΅Π½ΡΡŽΡ‰Π°Ρ порядок слСдования элСмСнтов Π² спискС

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π½Π° Python Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

# ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° reverse
N = 11
A = list(range(N))
print(A)
Β 
for i in range(N//2):
Β Β Β  A[i], A[N-i-1] = A[N-i-1], A[i]
Β 
print(A)

Π‘ΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²ΠΊΠ° ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ Π²Ρ‹Π±ΠΎΡ€Π°

ИдСя этого
ΠΌΠ΅Ρ‚ΠΎΠ΄Π° сортировки довольно проста. ΠšΠ»Π°ΡΡΠΈΡ‡Π΅ΡΠΊΠΈΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ для объяснСния ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Ρ…
Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ² – Π²Ρ‹ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ людСй ΠΏΠΎ росту, допустим ΠΏΠΎ Π²ΠΎΠ·Ρ€Π°ΡΡ‚Π°Π½ΠΈΡŽ. (Π”Π΅Ρ‚Π°Π»ΡŒΠ½Ρ‹ΠΉ Ρ€Π°Π·Π±ΠΎΡ€ самого Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° смотритС Π² Π²ΠΈΠ΄Π΅ΠΎ этого занятия).

Π­Ρ‚ΠΎΡ‚ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ Π½Π° Python ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

# сортировка ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ Π²Ρ‹Π±ΠΎΡ€Π°
A = [2, 2, -1, -5, 55, 34, 0, 10]
N = len(A)
for i in range(N-1):
Β Β Β  for j in range(i+1, N):
Β Β Β Β Β Β Β  if A[i] > A[j]:
Β Β Β Β Β Β Β Β Β Β Β  A[i], A[j] = A[j], A[i]
print(A)

Алгоритм Π•Π²ΠΊΠ»ΠΈΠ΄Π° (поиск наибольшСго ΠΎΠ±Ρ‰Π΅Π³ΠΎ дСлитСля Π΄Π²ΡƒΡ… чисСл)

ВСория. ΠŸΡƒΡΡ‚ΡŒ
Π΄Π°Π½Ρ‹ Π΄Π²Π° Π½Π°Ρ‚ΡƒΡ€Π°Π»ΡŒΠ½Ρ‹Ρ… числа a ΠΈ b, для ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ…
трСбуСтся Π½Π°ΠΉΡ‚ΠΈ ΠΠžΠ”. Π”Π°Π»Π΅Π΅, Ρ‚Π°ΠΊΠΎΠΉ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ:


ΠΏΠΎΠΊΠ° a Π½Π΅ Ρ€Π°Π²Π½ΠΎ b

Β Β Β Β Β Β Β Β Π½Π°Ρ…ΠΎΠ΄ΠΈΠΌ большСС срСди a ΠΈ b

Β Β Β Β Β Β Β Β ΡƒΠΌΠ΅Π½ΡŒΡˆΠ°Π΅ΠΌ большСС Π½Π° Π²Π΅Π»ΠΈΡ‡ΠΈΠ½Ρƒ мСньшСго

Π²Ρ‹Π²ΠΎΠ΄ΠΈΠΌ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½ΠΎΠ΅ Ρ€Π°Π²Π½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½Π½Ρ‹Ρ… Π²Π΅Π»ΠΈΡ‡ΠΈΠ½ a ΠΈ b

НапримСр,
ΠΏΡƒΡΡ‚ΡŒ Ρƒ нас Π΄Π²Π° числа: a=18 ΠΈ b=24 ΠΈ Π΄Π°Π»Π΅Π΅ ΠΏΠΎ
Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡƒ:

Π Π΅Π°Π»ΠΈΠ·ΡƒΠ΅ΠΌ этот Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ Π½Π° Python:

a = int(input("Π’Π²Π΅Π΄ΠΈΡ‚Π΅ 1-Π΅ Π½Π°Ρ‚ΡƒΡ€Π°Π»ΡŒΠ½ΠΎΠ΅ число: "))
b = int(input("Π’Π²Π΅Π΄ΠΈΡ‚Π΅ 2-Π΅ Π½Π°Ρ‚ΡƒΡ€Π°Π»ΡŒΠ½ΠΎΠ΅ число: "))
sa = a; sb = b
while a != b:
Β Β Β if a>b: a -= b
Β Β Β else: b -=a
Β 
print("ΠΠžΠ”(%d, %d) = %d"%(sa,sb,a))

Быстрый Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ Π•Π²ΠΊΠ»ΠΈΠ΄Π°

Но Ρƒ этого
Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° Π΅ΡΡ‚ΡŒ ΠΎΠ΄ΠΈΠ½ сущСствСнный нСдостаток: Ссли ΠΌΡ‹ Π²Π²Π΅Π΄Π΅ΠΌ Π΄Π²Π° Π²ΠΎΡ‚ Ρ‚Π°ΠΊΠΈΡ…
числа:

100000000 ΠΈ 2

Ρ‚ΠΎ этот Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ
Π½Π°Ρ‡Π½Π΅Ρ‚ довольно Π΄ΠΎΠ»Π³ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΈ понятно ΠΏΠΎΡ‡Π΅ΠΌΡƒ, здСсь ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ большоС
количСство Π²Ρ‹Ρ‡ΠΈΡ‚Π°Π½ΠΈΠΉ 2. Π­Ρ‚ΠΈ вычитания Π±ΡƒΠ΄ΡƒΡ‚ ΠΏΡ€ΠΎΠΈΡΡ…ΠΎΠ΄ΠΈΡ‚ΡŒ Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° Π΄Π²ΠΎΠΉΠΊΠ°
укладываСтся Π² ΠΎΡΡ‚Π°Π²ΡˆΠ΅Π΅ΡΡ число. И ΠΌΡ‹ здСсь Π±Π΅Π· всяких Π²Ρ‹Ρ‡ΠΈΡ‚Π°Π½ΠΈΠΉ сразу ΠΌΠΎΠΆΠ΅ΠΌ
ΡΠΊΠ°Π·Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π½Π° послСднСм шагС Π±ΡƒΠ΄Π΅Ρ‚ Π²ΠΎΡ‚ такая опСрация:

4-2 = 2

ПослС Ρ‡Π΅Π³ΠΎ ΠΎΠ±Π°
числа станут Ρ€Π°Π²Π½Ρ‹ΠΌΠΈ ΠΈ ΠΠžΠ” Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π²Π΅Π½ Π΄Π²ΡƒΠΌ. Π’Π°ΠΊ Π²ΠΎΡ‚, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π±Π΅Π· Π»ΠΈΡˆΠ½ΠΈΡ… ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ
сразу ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Π½Π° сколько Π±ΡƒΠ΄ΡƒΡ‚ ΠΎΡ‚Π»ΠΈΡ‡Π°Ρ‚ΡŒΡΡ Π΄Π²Π° числа послС сСрии Π²Ρ‹Ρ‡ΠΈΡ‚Π°Π½ΠΈΠΉ,
достаточно Π²Π·ΡΡ‚ΡŒ Ρ†Π΅Π»Ρ‹ΠΉ остаток ΠΎΡ‚ дСлСния. НапримСр:

100000000 % 2 =
0

Π­Ρ‚ΠΎ Π·Π½Π°Ρ‡ΠΈΡ‚, Ρ‡Ρ‚ΠΎ
большСС число ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ ΡΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ ΠΈΠ· суммы Π΄Π²ΠΎΠ΅ΠΊ. Π‘Π»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, ΠΎΠ½ΠΈ ΠΎΠ±Π°
дСлятся Π½Π° Π΄Π²Π° Π½Π°Ρ†Π΅Π»ΠΎ ΠΈ ΠΈΡ… ΠΠžΠ” Ρ€Π°Π²Π΅Π½ 2. Π₯ΠΎΡ€ΠΎΡˆΠΎ, Π° Ссли вмСсто 2 Π²Π·ΡΡ‚ΡŒ 3. Π’ этом
случаС ΠΈΠΌΠ΅Π΅ΠΌ:

100000000 % 3 =
1

ΠΈ Π΄Π°Π»Π΅Π΅ ΡƒΠΆΠ΅
ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒ Π΄Π²Π° числа: 3 ΠΈ 1. ΠŸΡ€ΠΈΡ‡Π΅ΠΌ, для Π½ΠΈΡ… Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ
Ρ‚Π°ΠΊΡƒΡŽ ΠΆΠ΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ:

3 % 1 = 1

1 % 1 = 0

ВсС, ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΈ
ΠΠžΠ”, Ρ€Π°Π²Π½Ρ‹ΠΉ 1. И смотритС, здСсь Π½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ большСС число дСлится Π½Π°
мСньшСС. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ быстрый Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ Π•Π²ΠΊΠ»ΠΈΠ΄Π° ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Ρ‚Π°ΠΊ:


ΠΏΠΎΠΊΠ° мСньшСС число большС 0

Β Β Β Β Β Β Β Β Π±ΠΎΠ»ΡŒΡˆΠ΅ΠΌΡƒ числу присваиваСм остаток ΠΎΡ‚ дСлСния Π½Π° мСньшСС число

Π²Ρ‹Π²ΠΎΠ΄ΠΈΠΌ большСС число

Π Π΅Π°Π»ΠΈΠ·ΡƒΠ΅ΠΌ этот Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ. И договоримся, Ρ‡Ρ‚ΠΎ большСС число Π±ΡƒΠ΄Π΅ΠΌ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Π² a, мСньшСС – Π² b.

a = int(input("Π’Π²Π΅Π΄ΠΈΡ‚Π΅ 1-Π΅ Π½Π°Ρ‚ΡƒΡ€Π°Π»ΡŒΠ½ΠΎΠ΅ число: "))
b = int(input("Π’Π²Π΅Π΄ΠΈΡ‚Π΅ 2-Π΅ Π½Π°Ρ‚ΡƒΡ€Π°Π»ΡŒΠ½ΠΎΠ΅ число: "))
sa = a; sb = b
b = min(sa, sb)
a = max(sa, sb)
while b:
Β Β Β  a,b = b, a%b
Β 
print("ΠΠžΠ”(%d, %d) = %d"%(sa,sb,a))

Π’ этом Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ΅
ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ свойство:

a%b = c,Β  c < b

Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ, остаток
всСгда Π±ΡƒΠ΄Π΅Ρ‚ мСньшС числа b. Π—Π½Π°Ρ‡ΠΈΡ‚, ΠΈΠ· Π΄Π²ΡƒΡ… чисСл c ΠΈ b большим Π±ΡƒΠ΄Π΅Ρ‚ b, Π° мСньшим – c. ИмСнно поэтому
Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ записано Ρ‚Π°ΠΊΠΎΠ΅ мноТСствСнноС присваиваниС:

a,b = b, a%b

ΠœΡ‹ здСсь ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ a
присваиваСм
Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ b, Π° b
становится
Ρ€Π°Π²Π½Ρ‹ΠΌ остатку ΠΎΡ‚ дСлСния. Π­Ρ‚ΠΎ гарантируСтся, Ρ‡Ρ‚ΠΎ a
>=
b.

Π˜Π½Π΄Π΅ΠΊΡΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π² Python — tirinox.ru

ΠŸΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΈ ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ индСксы

Допустим Ρƒ нас Π΅ΡΡ‚ΡŒ список ΠΈΠ»ΠΈ ΠΊΠΎΡ€Ρ‚Π΅ΠΆ.

x = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
t = (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10)

Π‘Π΅Π· ΠΏΠΎΡ‚Π΅Ρ€ΠΈ общности Π±ΡƒΠ΄Π΅ΠΌ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ со списком Ρ… (с ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠ΅ΠΌ t – Ρ‚ΠΎΠΆΠ΅ самоС).

Π›Π΅Π³ΠΊΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ i-Ρ‚Ρ‹ΠΉ элСмСнт этого списка ΠΏΠΎ индСксу.

Π’Π½ΠΈΠΌΠ°Π½ΠΈΠ΅! Π˜Π½Π΄Π΅ΠΊΡΡ‹ Π² Python ΡΡ‡ΠΈΡ‚Π°ΡŽΡ‚ΡΡ с нуля (0), ΠΊΠ°ΠΊ Π² Π‘++ ΠΈ Java.

>>> x[0]
0
>>> x[7]
7
>>> x[11]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IndexError: list index out of range

Π’ послСднСй строкС ΠΌΡ‹ Π²Ρ‹Π»Π΅Π·Π»ΠΈ Π·Π° ΠΏΡ€Π΅Π΄Π΅Π»Ρ‹ (Ρƒ нас Π² спискС послСдний индСкс – 10) ΠΈ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΈ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ IndexError.

Но Ρ‡Ρ‚ΠΎ Π±ΡƒΠ΄Π΅Ρ‚, Ссли ΠΌΡ‹ обратимся ΠΊ элСмСнту с ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ индСксом? Π’ Π‘++ Ρ‚Π°ΠΊΠΎΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠ΅ΠΉ Π²Ρ‹ Π±Ρ‹ прострСлили сСбС Π½ΠΎΠ³Ρƒ. А Π² Python? IndexError? НСт!

>>> x[-1]
10
>>> x[-2]
9
>>> x[-10]
1
>>> x[-11]
0

Π­Ρ‚ΠΎ ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½Π½ΠΎ лСгально. ΠœΡ‹ просто ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ элСмСнты Π½Π΅ с Π½Π°Ρ‡Π°Π»Π° списка, Π° с ΠΊΠΎΠ½Ρ†Π° (-i-Ρ‚Ρ‹ΠΉ элСмСнт).
x[-1] – послСдний элСмСнт.
x[-2] – прСдпослСдний элСмСнт.

Π­Ρ‚ΠΎ Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎ конструкции x[len(x)-i]:

>>> x[len(x)-1]
10

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ Π½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹ΠΉ (слСва) элСмСнт Π² ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠΉ Π½ΠΎΡ‚Π°Ρ†ΠΈΠΈ ΠΈΠΌΠ΅Π΅Ρ‚ индСкс -11.

Π‘Ρ€Π΅Π·Ρ‹

Π‘Ρ€Π΅Π·Ρ‹, ΠΎΠ½ΠΈ ΠΆΠ΅ slices, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ Π²Π°ΠΌ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΊΠ°ΠΊΡƒΡŽ-Ρ‚ΠΎ Ρ‡Π°ΡΡ‚ΡŒ списка ΠΈΠ»ΠΈ ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠ°.

Π€ΠΎΡ€ΠΌΠ° x[start:end] даст элСмСнты ΠΎΡ‚ индСкса start (Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ) Π΄ΠΎΒ end (Π½Π΅ Π²ΠΊΠ»ΡŽΡ‡Π°Ρ end). Если Π½Π΅ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒΒ start – ΠΌΡ‹ Π½Π°Ρ‡Π½Π΅ΠΌ с 0-Π³ΠΎ элСмСнта, Ссли Π½Π΅ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒΒ end – Ρ‚ΠΎ Π·Π°ΠΊΠΎΠ½Ρ‡ΠΈΠΌ послСдним элСмСнтом (Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ). БоотвСствСнно, x[:] это Ρ‚ΠΎΠΆΠ΅ самоС, Ρ‡Ρ‚ΠΎ ΠΈ просто x.

>>> x = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
>>> x[2:8]
[2, 3, 4, 5, 6, 7]
>>> x[:8]
[0, 1, 2, 3, 4, 5, 6, 7]
>>> x[2:]
[2, 3, 4, 5, 6, 7, 8, 9, 10]
>>> x[:]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

Если end <= start, ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ пустой список.

>>> x[5:3]
[]

Аналогично ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ΡŒ срСзы с ΠΎΡ‚Ρ‡Π΅Ρ‚ΠΎΠΌ ΠΎΡ‚ ΠΊΠΎΠ½Ρ†Π° списка с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… индСксов.

>>> a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
>>> a[-4:-2]
[7, 8]

Π’ этом случаС Ρ‚Π°ΠΊΠΆΠ΅Β start < end,Β ΠΈΠ½Π°Ρ‡Π΅ Π±ΡƒΠ΄Π΅Ρ‚ пустой список.

Π€ΠΎΡ€ΠΌΠ° x[start:end:step] даст элСмСнты ΠΎΡ‚ индСкса start (Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ) Π΄ΠΎΒ end (Π½Π΅ Π²ΠΊΠ»ΡŽΡ‡Π°Ρ end), Π² шагом step. Если step Ρ€Π°Π²Π΅Π½ 1, Ρ‚ΠΎ эта Ρ„ΠΎΡ€ΠΌΠ° Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½Π° ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΉ рассмотрСнной x[start:end].

>>> x[::2]
[0, 2, 4, 6, 8, 10]
>>> x[::3]
[0, 3, 6, 9]
>>> x[2:8:2]
[2, 4, 6]

x[::2] – ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Π²Ρ‚ΠΎΡ€ΠΎΠΉ элСмСнт, Π°Β x[::3] – ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ‚Ρ€Π΅Ρ‚ΠΈΠΉ.Β 

ΠžΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ шаг Π²Π΅Ρ€Π½Π΅Ρ‚ Π½Π°ΠΌ элСмСнты Π² ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠΌ порядкС:

>>> x[::-1]
[10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0]

# ΠΊΠ°ΠΊ Ссли Π±Ρ‹:
>>> list(reversed(x))
[10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0]

# Π² ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠΌ порядкС с шагом 2
>>> x[::-2]
[10, 8, 6, 4, 2, 0]

Π—Π°ΠΏΠΈΡΡŒ Π² список ΠΏΠΎ срСзу

МоТно ΠΏΡ€ΠΈΡΠ²ΠΎΠΈΡ‚ΡŒ части списка, ΠΎΡ‚ΠΎΠ±Ρ€Π°Π½Π½ΠΎΠΉ срСзом, Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π΄Ρ€ΡƒΠ³ΠΎΠΉ список, ΠΏΡ€ΠΈΡ‡Π΅ΠΌ Ρ€Π°Π·ΠΌΠ΅Ρ€ срСза Π½Π΅ обязан Ρ€Π°Π²Π½ΡΡ‚ΡŒΡΡ Ρ€Π°Π·ΠΌΠ΅Ρ€Ρƒ присваСмого списка.

Если Ρ€Π°Π·ΠΌΠ΅Ρ€Ρ‹ Ρ€Π°Π²Π½Ρ‹ (Π² ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π΄Π²Π° элСмСнта Π² срСзС ΠΈ Π΄Π²Π° элСмСнта Π²ΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΌ спискС) – происходит Π·Π°ΠΌΠ΅Π½Π° элСмСнтов.

>>> a = [1,2,3,4,5]
>>> a[1:3] = [22, 33]
>>> a
[1, 22, 33, 4, 5]

Если ΠΎΠ½ΠΈ Π½Π΅ Ρ€Π°Π²Π½Ρ‹ ΠΏΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€Ρƒ, Ρ‚ΠΎ Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ список Ρ€Π°ΡΡˆΠΈΡ€ΡΠ΅Ρ‚ΡΡ ΠΈΠ»ΠΈ сТимаСтся.

>>> a = [1, 2, 3, 4, 5]
# Ρ€Π°Π·ΠΌΠ΅Ρ€ срСза = 1 элСмСнт, Π° вставляСм Π΄Π²Π° (массив Ρ€Π°ΡΡˆΠΈΡ€ΠΈΠ»ΡΡ)
>>> a[2:3] = [0, 0]
>>> a
[1, 2, 0, 0, 4, 5]

# Ρ‚ΡƒΡ‚ Π²ΠΎΠΎΠ±Ρ‰Π΅ пустой Ρ€Π°Π·ΠΌΠ΅Ρ€ срСза = вставка подсписка ΠΏΠΎ индСксу 1
>>> a[1:1] = [8, 9]
>>> a
[1, 8, 9, 2, 0, 0, 4, 5]

# начиная с элСмСнта 1 ΠΈ кончая прСдпослСдним элСмСнтом ΠΌΡ‹ ΡƒΠ±Π΅Ρ€Π΅ΠΌ (присвоив пустой список)
>>> a[1:-1] = []
>>> a
[1, 5]

Π˜ΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½Ρ‹Π΅ срСзы

МоТно Π·Π°Ρ€Π°Π½Π΅Π΅ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ срСзы с ΠΊΠ°ΠΊΠΈΠΌΠΈ-Ρ‚ΠΎ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌΠΈ Π±Π΅Π· привязки ΠΊ списку ΠΈΠ»ΠΈ ΠΊΠΎΡ€Ρ‚Π΅ΠΆΡƒ встроСнной Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉΒ slice. А ΠΏΠΎΡ‚ΠΎΠΌ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ этот срСз ΠΊ ΠΊΠ°ΠΊΠΎΠΌΡƒ-Ρ‚ΠΎ списку.

>>> a = [0, 1, 2, 3, 4, 5]
>>> LASTTHREE = slice(-3, None)
>>> LASTTHREE
slice(-3, None, None)
>>> a[LASTTHREE]
[3, 4, 5]

ВмСсто пустых мСст для start, end ΠΈΠ»ΠΈ step здСсь ΠΌΡ‹ пишСм None.

Π’ Π·Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΊ этому Ρ€Π°Π·Π΄Π΅Π»Ρƒ Ρ…ΠΎΡ‡Ρƒ ΡΠΊΠ°Π·Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ срСзы списков Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‚ списки, срСзы ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠ΅ΠΉ – ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠΈ.

Π˜Π½Π΄Π΅ΠΊΡΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ своих ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ²

Π’ ΠΊΠΎΠ½Ρ†Π΅ ΠΊΠΎΠ½Ρ†ΠΎΠ², ΠΌΡ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ индСксации [], ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠ² для своСго класса магичСскиС ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹Β __getitem__,Β __setitem__ ΠΈ __delitem__. ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ вызываСтся ΠΏΡ€ΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠΈ значСния ΠΏΠΎ индСкса (ΠΈΠ»ΠΈ индСксам), Π²Ρ‚ΠΎΡ€ΠΎΠΉ – Ссли ΠΌΡ‹ попытаСмся Π½Π°ΡˆΠ΅ΠΌΡƒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ ΠΏΡ€ΠΈΡΠ²ΠΎΠΈΡ‚ΡŒ ΠΏΠΎ индСксу. А Ρ‚Ρ€Π΅Ρ‚ΠΈΠΉ – Ссли ΠΌΡ‹ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ‹Ρ‚Π°Ρ‚ΡŒΡΡ Π΄Π΅Π»Π°Ρ‚ΡŒ del ΠΏΠΎ индСксу. ΠΠ΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒ ΠΈΡ… всС. МоТно Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

# ΠΏΡ€ΠΈ Ρ‡Ρ‚Π΅Π½ΠΈΠΈ ΠΏΠΎ индСксу ΠΈΠ· этого класса, ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ ΡƒΠ΄Π²ΠΎΠ΅Π½Π½Ρ‹Ρ… индСкс
class MyClass:
    def __getitem__(self, key):
       return key * 2

myobj = MyClass()
myobj[3]Β  #Β Π²Π΅Ρ€Π½Π΅Ρ‚Β 6
myobj["privet!"] # ΠΏΡ€ΠΈΠΊΠΎΠ»ΠΈΡΡŒ, Π±ΡƒΠ΄Π΅Ρ‚: 'privet!privet!'

Π’ качСствС ΠΊΠ»ΡŽΡ‡Π΅ΠΉ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ†Π΅Π»Ρ‹Π΅ числа, Π½ΠΎ ΠΈ строки ΠΈΠ»ΠΈ Π»ΡŽΠ±Ρ‹Π΅ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ значСния, Π² Ρ‚ΠΎΠΌ числС slice ΠΈΒ Ellipsis. Как Π²Ρ‹ Π±ΡƒΠ΄Π΅Ρ‚Π΅ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ ΠΈΡ… – Ρ€Π΅ΡˆΠ°Ρ‚ΡŒ Π²Π°ΠΌ. ЕстСствСнно, Π»ΠΎΠ³ΠΈΠΊΠ°, описанная Π² ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΡ… Ρ€Π°Π·Π΄Π΅Π»Π°Ρ…, здСсь Π±ΡƒΠ΄Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² Ρ‚ΠΎΠΌ случаС, Ссли Π²Ρ‹ Π΅Π΅ сами Ρ‚Π°ΠΊ Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚Π΅.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€. ЭкзСмпляр этого класса Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌ Π½Π°ΠΌ список ΠΈΠ· Ρ†Π΅Π»Ρ‹Ρ… чисСл ΠΏΠΎ индСксу Π² Π²ΠΈΠ΄Π΅ срСзу. Π­Ρ‚Π°ΠΊΠΈΠΉ бСсконСчный массив Ρ†Π΅Π»Ρ‹Ρ… чисСл, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΠΎΡ‡Ρ‚ΠΈ Π½Π΅ Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ‚ памяти.

class IntegerNumbers:
  def __getitem__(self, key):
    if isinstance(key, int):
      return key
    elif isinstance(key, slice):
      return list(range(key.start, key.stop, key.step))
    else:
      raise ValueError

ints = IntegerNumbers() 
print(ints[10])  # 10
print(ints[1:10:2]) # [1, 3, 5, 7, 9]
print(ints["wwdwd"]) # Ρ‚Π°ΠΊ нСльзя

МоТно ΠΈΠΌΠ΅Ρ‚ΡŒ нСсколько индСксов. НиТС ΠΌΡ‹ суммируСм всС значСния индСксов.

class MultiIndex:
  def __getitem__(self, keys): 
    # всС индСксы (Ссли ΠΈΡ… 2 ΠΈ большС ΠΏΠΎΠΏΠ°Π΄ΡƒΡ‚) Π² keys с Ρ‚ΠΈΠΏΠΎΠΌ tuple
    return sum(keys)  # просуммируСм ΠΈΡ…

prod = MultiIndex()
print(prod[10, 20])  # Π½Π°ΠΏΠ΅Ρ‡Π°Π΅Ρ‚ 30

Π£Π΄Π°Ρ‡ΠΈ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ ΠΈ ΠΆΠΈΠ·Π½ΠΈ!

πŸ‰ Π‘ΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎ для ΠΊΠ°Π½Π°Π»Π°Β @pyway.Β ΠŸΠΎΠ΄ΠΏΠΈΡΡ‹Π²Π°ΠΉΡ‚Π΅ΡΡŒ Π½Π° ΠΌΠΎΠΉ ΠΊΠ°Π½Π°Π» Π² Π’Π΅Π»Π΅Π³Ρ€Π°ΠΌΒ @pyway πŸ‘ˆΒ 




1Β 498

Python с нуля β€” Ρ‡Π°ΡΡ‚ΡŒ 8: списки

Основной структурой Π΄Π°Π½Π½Ρ‹Ρ… Π² Python ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ (sequence ). ΠšΠ°ΠΆΠ΄ΠΎΠΌΡƒ элСмСнту Π² ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈΒ  присвоСн Π½ΠΎΠΌΠ΅Ρ€ β€” Π΅Π³ΠΎ позиция Π² ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ, ΠΈΠ»ΠΈ индСкс (index). ΠŸΠ΅Ρ€Π²Ρ‹ΠΌ всСгда являСтся ноль.

Π’ Python имССтся ΡˆΠ΅ΡΡ‚ΡŒ встроСнных Ρ‚ΠΈΠΏΠΎΠ² ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚Π΅ΠΉ, Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΌΠΈ ΡΠ²Π»ΡΡŽΡ‚ΡΡΒ ΡΠΏΠΈΡΠΊΠΈ (list) ΠΈ ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠΈ (tuple), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΡ‹ рассмотрим Π΄Π°Π»Π΅Π΅.

Π˜ΠΌΠ΅Π΅Ρ‚ΡΡ нСсколько Ρ‚ΠΈΠΏΠΎΠ² ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ с ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡΠΌΠΈ. Π­Ρ‚ΠΎ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ индСксирования (indexing), срСзы (slicing), Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ (adding), ΡƒΠΌΠ½ΠΎΠΆΠ΅Π½ΠΈΠ΅ (multiplying) ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° члСнства (membership). ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, Π² Python имССтся нСсколько встроСнных Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ для получСния Π΄Π»ΠΈΠ½Ρ‹ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΈ поиска Π½Π°ΠΈΠ±ΠΎΠ»ΡŒΡˆΠΈΡ… ΠΈ Π½Π°ΠΈΠΌΠ΅Π½ΡŒΡˆΠΈΡ… Π΅Ρ‘ элСмСнтов.

Бписки в Python

Бписки β€” Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΠΌΠ½ΠΎΠ³ΠΎΡ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹ΠΉ Ρ‚ΠΈΠΏ Π΄Π°Π½Π½Ρ‹Ρ… Π² языкС Python, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ записываСтся ΠΊΠ°ΠΊ список элСмСнтов, Ρ€Π°Π·Π΄Π΅Π»Ρ‘Π½Π½Ρ‹Ρ… запятой, Π·Π°ΠΊΠ»ΡŽΡ‡Ρ‘Π½Π½Ρ‹Π΅ Π² ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π½Ρ‹Π΅ скобки. ΠŸΡ€ΠΈΡ‡Ρ‘ΠΌ Π΄Π°Π½Π½Ρ‹Π΅ (элСмСнты) списка Π½Π΅ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ ΠΎΠ΄Π½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° (Ρ‚.Π΅., список ΠΌΠΎΠΆΠ΅Ρ‚ Π²ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ Π² сСбя ΠΊΠ°ΠΊ Π΄Π°Π½Π½Ρ‹Π΅ Ρ‚ΠΈΠΏΠ° int, Ρ‚Π°ΠΊ ΠΈ str ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅).

ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹:

>>> list1 =['physics','chemistry',1997,2000];
>>> list2 =[1,2,3,4,5];
>>> list3 =["a","b","c","d"];
>>> print list1, list2, list3
['physics', 'chemistry', 1997, 2000] [1, 2, 3, 4, 5] ['a', 'b', 'c', 'd']

Как ΠΈ индСксы Π² строках, индСкс Π² спискС начинаСтся  с нуля. Бписки Ρ‚Π°ΠΊ ΠΆΠ΅ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΠ΄Π²Π΅Ρ€ΠΆΠ΅Π½Ρ‹ «слайсингу» ΠΈΠ»ΠΈ «срСзу» ΠΈ Ρ‚Π°ΠΊ Π΄Π°Π»Π΅Π΅.

Доступ ΠΊ элСмСнтам списка

Π§Ρ‚ΠΎ Π±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ элСмСнта(ΠΎΠ²) списка β€” ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π½Ρ‹Π΅ скобки с ΡƒΠΊΠ°Π·Π°Π½ΠΈΠ΅ΠΌ индСкса для получСния срСза ΠΈΠ»ΠΈ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ элСмСнта::

>>> list1 = ['physics', 'chemistry', 1997, 2000];
>>> list2 = [1, 2, 3, 4, 5, 6, 7 ];
>>>
>>> print "list1[0]: ", list1[0]
list1[0]:  physics
>>> print "list2[1:5]: ", list2[1:5]
list2[1:5]:  [2, 3, 4, 5]

ОбновлСниС Π΄Π°Π½Π½Ρ‹Ρ… Π² спискС

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ значСния ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ»ΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… элСмСнтов с спискС, ΡƒΠΊΠ°Π·Π°Π² срСз элСмСнтов с Π»Π΅Π²ΠΎΠΉ стороны ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° присваивания, Π»ΠΈΠ±ΠΎ с использованиСм ΠΌΠ΅Ρ‚ΠΎΠ΄Π° append():

>>> list = ['physics', 'chemistry', 1997, 2000];
>>>
>>> print "Value available at index 2 : "
Value available at index 2 :
>>> print list[2];
1997
>>> list[2] = 2001;
>>> print "New value available at index 2 : "
New value available at index 2 :
>>> print list[2];
2001

ΠœΠ΅Ρ‚ΠΎΠ΄ append() ΠΌΡ‹ арссмотрим ΠΏΠΎΠ·ΠΆΠ΅.

Π£Π΄Π°Π»Π΅Π½ΠΈΠ΅ элСмСнта списка

Π§Ρ‚ΠΎ Π±Ρ‹ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ элСмСнт β€” Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π»ΠΈΠ±ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ del, Ссли Π²Ρ‹ Ρ‚ΠΎΡ‡Π½ΠΎ Π·Π½Π°Π΅Ρ‚Π΅ ΠΊΠ°ΠΊΠΎΠΉ ΠΈΠΌΠ΅Π½Π½ΠΎ элСмСнт Π½Π°Π΄ΠΎ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ, Π»ΠΈΠ±ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ remove(), Ссли Π½Π΅ ΡƒΠ²Π΅Ρ€Π΅Π½Ρ‹:

>>> list1 = ['physics', 'chemistry', 1997, 2000];
>>>
>>> print list1;
['physics', 'chemistry', 1997, 2000]
>>> del list1[2];
>>> print "After deleting value at index 2 : "
After deleting value at index 2 :
>>> print list1;
['physics', 'chemistry', 2000]

ΠœΠ΅Ρ‚ΠΎΠ΄ remove() ΠΌΡ‹ рассмотрим ΠΏΠΎΠ·Π΄Π½Π΅Π΅.

Π‘Π°Π·ΠΎΠ²Ρ‹Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ со списками Π² Python

Бписки Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ с ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π°ΠΌΠΈ + ΠΈ * Ρ‚Π°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ ΠΈ строки; эти ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ Ρ‚Π°ΠΊ ΠΆΠ΅ ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π°ΡŽΡ‚ ΠΊΠΎΠ½ΠΊΠ°Ρ‚Π΅Π½Π°Ρ†ΠΈΡŽ ΠΈ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π΅Π½ΠΈΠ΅, Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ Π±ΡƒΠ΄Π΅Ρ‚ создан Π½ΠΎΠ²Ρ‹ΠΉ список Π° Π½Π΅ строка.

ЀактичСски, списки ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ всС Ρ‚Π΅ ΠΆΠ΅ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΡ‹ рассматривали для строк Π² ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΉ Π³Π»Π°Π²Π΅:

Python ExpressionResultsDescription
len([1, 2, 3])3Π΄Π»ΠΈΠ½Π°
[1, 2, 3] + [4, 5, 6][1, 2, 3, 4, 5, 6]объСдинСниС
[β€˜Hi!’] * 4[β€˜Hi!’, β€˜Hi!’, β€˜Hi!’, β€˜Hi!’]ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π΅Π½ΠΈΠ΅
3 in [1, 2, 3]TrueчлСнство
for x in [1, 2, 3]: print x,1 2 3ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π΅Π½ΠΈΠ΅

Π˜Π½Π΄Π΅ΠΊΡΡ‹, срСзы ΠΈ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹

Как ΡƒΠΆΠ΅ Π³ΠΎΠ²ΠΎΡ€ΠΈΠ»ΠΎΡΡŒ, списки ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡΠΌΠΈ ΠΈ с Π½ΠΈΠΌΠΈ Π±ΡƒΠ΄ΡƒΡ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ получСния индСксов ΠΈ срСзов Ρ‚Π°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ ΠΈ со строками.

ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Ρƒ нас Π΅ΡΡ‚ΡŒ Ρ‚Π°ΠΊΠΎΠΉ список:

>>> L = ['spam', 'Spam', 'SPAM!']
Python ExpressionResultsDescription
L[2]β€˜SPAM!’смСщСниС всСгда начинаСтся с нуля
L[-2]β€˜Spamβ€™ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ индСкс: отсчёт с ΠΏΡ€Π°Π²ΠΎΠΉ стороны списка
L[1:][β€˜Spam’, β€˜SPAM!’]срСз ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ «участки» списка

ВстроСнныС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ списков

Π’ Python Π΅ΡΡ‚ΡŒ Ρ‚Π°ΠΊΠΈΠ΅ встроСнныС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ со списками:

SNFunction with Description
1cmp(list1, list2)
сравнСниС элСмСнтов с ΠΎΠ±Π΅ΠΈΡ… сторон;
2len(list)
ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ Π΄Π»ΠΈΠ½Ρ‹ списка;
3max(list)
ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ наибольшСго элСмСнта списка;
4min(list)
ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ наимСньшСго элСмСнта списка;
5list(seq)
ΠΏΡ€Π΅Π²Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠ° Π² список;

Π’ Python Π΅ΡΡ‚ΡŒ Ρ‚Π°ΠΊΠΈΠ΅ встроСнныС ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ со списками:

SNMethods with Description
1list.append(obj)
добавляСт obj списку;
2list.count(obj)
подсчитываСт, ΠΊΠ°ΠΊ часто элСмСнт obj встрСчаСтся Π² спискС;
3list.extend(seq)
добавляСт ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΊ списку;
4list.index(obj)
Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ индСкс ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° obj, Ссли ΠΎΠ½ Π½Π°ΠΉΠ΄Π΅Π½ Π² Π² спискС;
5list.insert(index, obj)
вставляСт Π½ΠΎΠ²Ρ‹ΠΉ элСмСнт Π² список Π½Π° ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΉ индСкс;
6list.pop(obj=list[-1])
удаляСт obj ΠΈΠ· списка ΠΈ ΠΏΠ΅Ρ‡Π°Ρ‚Π°Π΅Ρ‚ Π΅Π³ΠΎ;
7list.remove(obj)
удаляСт obj ΠΈΠ· списка;
8list.reverse()
мСняСт порядок элСмСнтов Π² спискС Π½Π° ΠΎΠ±Ρ€Π°Ρ‚Π½Ρ‹ΠΉ;
9list.sort([func])
сортируСт ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Π² спискС, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Π·Π°Π΄Π°Π½Π½ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ func, Ссли ΡƒΠΊΠ°Π·Π°Π½Π°;

строки, сравнСния строк, Π±Π°Π·ΠΎΠ²Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ str, len, ord, in

Π’ Python Π΅ΡΡ‚ΡŒ нСсколько способов задания строк. Π‘ ΠΏΠ΅Ρ€Π²Ρ‹ΠΌΠΈ двумя способами ΠΌΡ‹ ΡƒΠΆΠ΅ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ познакомились Π½Π° ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΡ… занятиях:

str1 = 'Hello1'
str2 = "Hello2"

А Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Π΄Π²Π° ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ Π·Π°Π΄Π°Π²Π°Ρ‚ΡŒ многострочныС Π΄Π°Π½Π½Ρ‹Π΅:

str3 = '''ΠœΠ½ΠΎΠ³ΠΎΡΡ‚Ρ€ΠΎΡ‡Π½Ρ‹Π΅
строки 1''';
Β 
str4 = """ΠœΠ½ΠΎΠ³ΠΎΡΡ‚Ρ€ΠΎΡ‡Π½Ρ‹Π΅
строки2""";
print(str1)
print(str2)
print(str3)
print(str4)

Π’ΠΎ Π΅ΡΡ‚ΡŒ,
синтаксис ΠΈΠ· Ρ‚Ρ€Π΅Ρ… ΠΊΠ°Π²Ρ‹Ρ‡Π΅ΠΊ Π·Π°Π΄Π°Π΅Ρ‚ мноТСствСнныС строки. ΠŸΡ€ΠΈΡ‡Π΅ΠΌ, смотритС, Ссли
ΠΌΡ‹ нСпосрСдствСнно Π² консоли напишСм:

Ρ‚ΠΎ ΠΏΡ€ΠΈ Π²Ρ‹Π²ΠΎΠ΄Π΅
послС hello ΡƒΠ²ΠΈΠ΄ΠΈΠΌ символ \n, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈ
ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ строки. Ѐункция print обрабатывая этот
символ Π΄Π΅Π»Π°Π΅Ρ‚ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ строки:

Если Π² ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠ°Ρ…
Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ записано:

Ρ‚ΠΎ это Π±ΡƒΠ΄Π΅Ρ‚
пустая строка, Π½Π΅ содСрТащая Π½ΠΈΠΊΠ°ΠΊΠΈΡ… символов.

ΠŸΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с
ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌΠΈ Π² Python всСгда слСдуСт
ΠΏΠΎΠΌΠ½ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ это лишь ссылки Π½Π° ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹. Из этого слСдуСт, Ρ‡Ρ‚ΠΎ
Ссли Ρƒ нас ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π° нСкая строка:

str1 = "сообщСниС"

ΠΈ ΠΌΡ‹ Π΄Ρ€ΡƒΠ³ΠΎΠΉ
ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ присвоим ΠΏΠ΅Ρ€Π²ΡƒΡŽ:

Ρ‚ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ Π΄Π²Π΅
ссылки Π½Π° ΠΎΠ΄ΠΈΠ½ ΠΈ Ρ‚ΠΎΡ‚ ΠΆΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ (ΠΎΠ΄Π½Ρƒ строку). Π’ΠΎ Π΅ΡΡ‚ΡŒ, ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ строки здСсь
Π½Π΅ происходит!

Как ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ
ΠΊΠΎΠΏΠΈΠΈ строк Π²Ρ‹ ΡƒΠ·Π½Π°Π΅Ρ‚Π΅ дальшС ΠΈΠ· этого занятия.

ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ для строк

ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ +
– это соСдинСниС Π΄Π²ΡƒΡ… строк (ΠΈΠ»ΠΈ ΠΊΠ°ΠΊ Π΅Ρ‰Π΅ говорят, конкатСнация строк). Он ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ
Ρ‚Π°ΠΊ:

str1 = 'Hello'
str2 = "world!"
msg = str1+str2
print(msg)

Π—Π΄Π΅ΡΡŒ сначала
Π±ΡƒΠ΄ΡƒΡ‚ ΠΈΠ΄Ρ‚ΠΈ символы ΠΏΠ΅Ρ€Π²ΠΎΠΉ строки, Π° Π·Π°Ρ‚Π΅ΠΌ – Π²Ρ‚ΠΎΡ€ΠΎΠΉ. Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ Ρƒ нас
формируСтся Π½ΠΎΠ²Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, содСрТащий эти символы. Но Ρƒ нас ΠΎΠ±Π° слова слились Π²
ΠΎΠ΄Π½ΠΎ. Как ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ Π±Ρ‹ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΌΠ΅ΠΆΠ΄Ρƒ Π½ΠΈΠΌΠΈ ΠΏΡ€ΠΎΠ±Π΅Π»? Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Ρ‚Π°ΠΊ:

Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ, ΠΌΡ‹
ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΡΠΎΠ΅Π΄ΠΈΠ½ΡΡ‚ΡŒ мноТСство строк ΠΌΠ΅ΠΆΠ΄Ρƒ собой. И здСсь Π²Π°ΠΆΠ½ΠΎ
Π·Π½Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΡΠΎΠ΅Π΄ΠΈΠ½ΡΡ‚ΡŒ ΠΌΠ΅ΠΆΠ΄Ρƒ собой ΠΌΠΎΠΆΠ½ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ строки. НапримСр, Π²ΠΎΡ‚ такая
опСрация ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Ρ‚ ΠΊ ошибкС:

dig = 5
msg = "число = "+dig
print(msg)

Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ dig здСсь число, Π°
Π½Π΅ строка. ΠŸΠΎΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π² число Π² строку с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ
Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ

<p align=center>str(<Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚>)
msg = "число = "+str(dig)

Π’Π΅ΠΏΠ΅Ρ€ΡŒ всС
сработаСт. ΠŸΡ€ΠΈΡ‡Π΅ΠΌ, с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ str ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒ
самыС Ρ€Π°Π·Π½Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹ Π΄Π°Π½Π½Ρ‹Ρ… Π² строки – это ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½Ρ‹ΠΉ инструмСнт.

Π”Π°Π»Π΅Π΅, Π² Python довольно просто
выполняСтся Π΄ΡƒΠ±Π»ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ строки. ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ Ρƒ нас Π΅ΡΡ‚ΡŒ Π²ΠΎΡ‚ такая строка:

ΠΈ ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ Π΅Π΅
Ρ€Π°Π·ΠΌΠ½ΠΎΠΆΠΈΡ‚ΡŒ n Ρ€Π°Π·. Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ
ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Ρ‚Π°ΠΊ:

РазумССтся,
число ΠΊΠΎΠΏΠΈΠΉ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒΡΡ ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Ρ†Π΅Π»Ρ‹ΠΌΠΈ числами, Ρ‚.Π΅. Π΄Π΅Π»Π°Ρ‚ΡŒ Π²ΠΎΡ‚
Ρ‚Π°ΠΊΡƒΡŽ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ

нСльзя,
ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΠ΄Π΅Ρ‚ ошибка.

Π”Π°Π»Π΅Π΅, для
опрСдСлСния Π΄Π»ΠΈΠ½Ρ‹ строки, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ, числа символов Π² строкС (Π²ΠΊΠ»ΡŽΡ‡Π°Ρ ΡƒΠΏΡ€Π°Π²Π»ΡΡŽΡ‰ΠΈΠ΅
символы), ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ функция

len(<строка>)

НапримСр:

N = len(msg)
print(msg, N)

Π—Π°Ρ‚Π΅ΠΌ, для
ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ наличия Π² строкС Ρ‚ΠΎΠΉ ΠΈΠ»ΠΈ ΠΈΠ½ΠΎΠΉ подстроки, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ in:

<подстрока>
in <строка>

Он Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ True, Ссли подстрока
присутствуСт ΠΈ False, Ссли отсутствуСт. НапримСр:

s = "abcdefg0123"
"abc" in s
'0' in s
'43' in s

Для сравнСния
строк ΠΌΠ΅ΠΆΠ΄Ρƒ собой ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ сравнСния

<строка 1>
== <строка 2>

Π”Π°Π½Π½Ρ‹ΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€
Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ True, Ссли строки
Ρ€Π°Π²Π½Ρ‹ ΠΈ False, Ссли Π½Π΅ Ρ€Π°Π²Π½Ρ‹.
ΠŸΡ€ΠΈΠΌΠ΅Ρ€:

"abc" == 'abc'
"ABC" == 'abc'

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅
Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, строка, записанная Π·Π°Π³Π»Π°Π²Π½Ρ‹ΠΌΠΈ Π±ΡƒΠΊΠ²Π°ΠΌΠΈ – это Π² Python ΡƒΠΆΠ΅ другая
строка ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ сравнСния для Π½ΠΈΡ… Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ False.

Для сравнСния
нСравСнства строк ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ Π½Π΅ Ρ€Π°Π²Π½ΠΎ:

<строка 1> != <строка 2>

Он Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ True, Ссли строки Π½Π΅
Ρ€Π°Π²Π½Ρ‹ ΠΈ False Π² ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ
случаС.

РазумССтся, эти ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ
сравнСния ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Π² условном ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π΅ if ΠΈΠ»ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π°Ρ…
Ρ†ΠΈΠΊΠ»ΠΎΠ² while ΠΈ for, ΠΎ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΌΡ‹
ΡƒΠΆΠ΅ с Π²Π°ΠΌΠΈ Π³ΠΎΠ²ΠΎΡ€ΠΈΠ»ΠΈ. НапримСр, ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Ρ‚Π°ΠΊΡƒΡŽ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ:

psw = "pass"
in_psw = ""
while psw != in_psw:
Β Β Β in_psw = input("Π’Π²Π΅Π΄ΠΈΡ‚Π΅ ΠΏΠ°Ρ€ΠΎΠ»ΡŒ: ")
print("Π’Ρ…ΠΎΠ΄ Π² систСму Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½")

Π—Π΄Π΅ΡΡŒ
ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Π±ΡƒΠ΄Π΅Ρ‚ Π²Π²ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΏΠ°Ρ€ΠΎΠ»ΡŒ, ΠΏΠΎΠΊΠ° Π½Π΅ Π²Π²Π΅Π΄Π΅Ρ‚ Π·Π°Π΄Π°Π½Π½Ρ‹ΠΉ, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ, строку pass.

Π’Π°ΠΊΠΆΠ΅ строки
ΠΌΠΎΠΆΠ½ΠΎ ΡΡ€Π°Π²Π½ΠΈΠ²Π°Ρ‚ΡŒ Π½Π° большС ΠΈ мСньшС:

<строка 1>
< <строка 2>


<строка 1>
> <строка 2>

Π—Π΄Π΅ΡΡŒ
ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ лСксикографичСский порядок ΠΏΡ€ΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ: какая строка большС, Π°
какая мСньшС. ΠœΡ‹ ΠΎΠ± этом ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ Π³ΠΎΠ²ΠΎΡ€ΠΈΠ»ΠΈ, ΠΊΠΎΠ³Π΄Π° рассматривали условный
ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ if.

Π‘Π»Π΅Π΄ΡƒΡŽΡ‰Π°Ρ функция

ord(<символ>)

Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΊΠΎΠ΄ ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠ³ΠΎ символа Π² строкС, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

ord("a")
ord('A')
ord('0')

Π­Ρ‚ΠΎ основныС ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Ρ€Π°Π±ΠΎΡ‚Ρ‹ со строками Π² Python. На ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ занятии ΠΌΡ‹ индСксы ΠΈ срСзы строк.

Python List Slicing — Learn By Example

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ доступ ΠΊ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Ρƒ элСмСнтов Π² спискС, Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Ρ€Π°Π·Ρ€Π΅Π·Π°Ρ‚ΡŒ список. Один ΠΈΠ· способов ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ это — ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ простой ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ Π½Π°Ρ€Π΅Π·ΠΊΠΈ :

Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ этого ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ, Π³Π΄Π΅ Π½Π°Ρ‡Π°Ρ‚ΡŒ Π½Π°Ρ€Π΅Π·ΠΊΡƒ, Π³Π΄Π΅ Π·Π°ΠΊΠΎΠ½Ρ‡ΠΈΡ‚ΡŒ ΠΈ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ шаг.

НарСзка списка

Если L являСтся списком, Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ L [start: stop: step] Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Ρ‡Π°ΡΡ‚ΡŒ списка ΠΎΡ‚ Π½Π°Ρ‡Π°Π»Π° индСкса Π΄ΠΎ остановки индСкса с шагом Ρ€Π°Π·ΠΌΠ΅Ρ€Π° шага.

Бинтаксис

Π‘Π°Π·ΠΎΠ²Ρ‹ΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€

Π’ΠΎΡ‚ Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π½Π°Ρ€Π΅Π·ΠΊΠΈ списка.

  L = ['a', 'b', 'c', 'd', 'e', ​​'f', 'g', 'h', 'i']
ΠΏΠ΅Ρ‡Π°Ρ‚ΡŒ (L [2: 7])
# ΠŸΠ΅Ρ‡Π°Ρ‚Π°Π΅Ρ‚ ['c', 'd', 'e', ​​'f', 'g']  

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ элСмСнт с индСксом 7 'h' Π½Π΅ Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ.

Π‘Ρ€Π΅Π· с ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ индСксами

Π’Ρ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ индСксы ΠΏΡ€ΠΈ Ρ€Π°Π·Ρ€Π΅Π·Π°Π½ΠΈΠΈ списка.

  L = ['a', 'b', 'c', 'd', 'e', ​​'f', 'g', 'h', 'i']
ΠΏΠ΅Ρ‡Π°Ρ‚ΡŒ (L [-7: -2])
# ΠŸΠ΅Ρ‡Π°Ρ‚Π°Π΅Ρ‚ ['c', 'd', 'e', ​​'f', 'g']  

Π‘Ρ€Π΅Π· с ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ ΠΈ ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ индСксами

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅, Ρ‚Π°ΠΊ ΠΈ ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ индСксы ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ.

  L = ['a', 'b', 'c', 'd', 'e', ​​'f', 'g', 'h', 'i']
ΠΏΠ΅Ρ‡Π°Ρ‚ΡŒ (L [2: -5])
# ΠŸΠ΅Ρ‡Π°Ρ‚Π°Π΅Ρ‚ ['c', 'd']  

Π£ΠΊΠ°ΠΆΠΈΡ‚Π΅ шаг Π½Π°Ρ€Π΅Π·ΠΊΠΈ

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ шаг Π½Π°Ρ€Π΅Π·ΠΊΠΈ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° step. ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ шага являСтся Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ ΠΈ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Ρ€Π°Π²Π΅Π½ 1.

  # Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Π²Ρ‚ΠΎΡ€ΠΎΠΉ элСмСнт ΠΌΠ΅ΠΆΠ΄Ρƒ позициями 2–7.
L = ['a', 'b', 'c', 'd', 'e', ​​'f', 'g', 'h', 'i']
ΠΏΠ΅Ρ‡Π°Ρ‚ΡŒ (L [2: 7: 2])
# ΠŸΠ΅Ρ‡Π°Ρ‚Π°Π΅Ρ‚ ['c', 'e', ​​'g']  

ΠžΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€ шага

Π’Ρ‹ Π΄Π°ΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€ шага.

  # Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ 2-ΠΉ элСмСнт с 6 ΠΏΠΎ 1
L = ['a', 'b', 'c', 'd', 'e', ​​'f', 'g', 'h', 'i']
ΠΏΠ΅Ρ‡Π°Ρ‚ΡŒ (L [6: 1: -2])
# ΠŸΠ΅Ρ‡Π°Ρ‚Π°Π΅Ρ‚ ['g', 'e', ​​'c']  

Slice at Beginning & End

Если Π½Π΅ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ Π½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹ΠΉ индСкс, слайс начинаСтся с индСкса 0. Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ L [: stop] эквивалСнтно L [0: stop]

  # ΠΠ°Ρ€Π΅Π·Π°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π²Ρ‹Π΅ Ρ‚Ρ€ΠΈ элСмСнта ΠΈΠ· списка
L = ['a', 'b', 'c', 'd', 'e', ​​'f', 'g', 'h', 'i']
ΠΏΠ΅Ρ‡Π°Ρ‚ΡŒ (L [: 3])
# ΠŸΠ΅Ρ‡Π°Ρ‚Π°Π΅Ρ‚ ['a', 'b', 'c']  

ΠŸΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ Π²ΠΎ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ отсутствиС индСкса остановки Ρ€Π°ΡΡˆΠΈΡ€ΡΠ΅Ρ‚ срСз Π΄ΠΎ ΠΊΠΎΠ½Ρ†Π° списка.Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ L [Π½Π°Ρ‡Π°Π»ΠΎ:] эквивалСнтно L [Π½Π°Ρ‡Π°Π»ΠΎ: len (L)]

  # ΠΠ°Ρ€Π΅Π·Π°Ρ‚ΡŒ послСдниС Ρ‚Ρ€ΠΈ элСмСнта ΠΈΠ· списка
L = ['a', 'b', 'c', 'd', 'e', ​​'f', 'g', 'h', 'i']
ΠΏΠ΅Ρ‡Π°Ρ‚ΡŒ (L [6:])
# Π’Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ ['g', 'h', 'i']  

ΠŸΠ΅Ρ€Π΅Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ список

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠ΅Ρ€Π΅Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ список, пропустив ΠΎΠ±Π° индСкса запуска ΠΈ остановки ΠΈ ΡƒΠΊΠ°Π·Π°Π² шаг ΠΊΠ°ΠΊ -1.

  L = ['a', 'b', 'c', 'd', 'e']
ΠΏΠ΅Ρ‡Π°Ρ‚ΡŒ (L [:: - 1])
# ΠŸΠ΅Ρ‡Π°Ρ‚Π°Π΅Ρ‚ ['e', 'd', 'c', 'b', 'a']  

Π˜Π·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ нСсколько Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ списка

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ нСсколько элСмСнтов списка ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ с Π½Π°Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ срСза .Π­Ρ‚ΠΎ Π½Π°Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ замСняСт ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΉ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚ списка элСмСнтами Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π½ΠΎΠ³ΠΎ ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΎΠ³ΠΎ .

  # Π˜Π·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ нСсколько элСмСнтов списка
L = ['a', 'b', 'c', 'd', 'e']
L [1: 4] = [1, 2, 3]
ΠΏΠ΅Ρ‡Π°Ρ‚ΡŒ (L)
# ΠŸΠ΅Ρ‡Π°Ρ‚ΡŒ ['a', 1, 2, 3, 'e']  
  # Π—Π°ΠΌΠ΅Π½Π° Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… элСмСнтов вмСсто ΠΎΠ΄Π½ΠΎΠ³ΠΎ элСмСнта
L = ['a', 'b', 'c', 'd', 'e']
L [1: 2] = [1, 2, 3]
ΠΏΠ΅Ρ‡Π°Ρ‚ΡŒ (L)
# ΠŸΠ΅Ρ‡Π°Ρ‚Π°Π΅Ρ‚ ['a', 1, 2, 3, 'c', 'd', 'e']  

Π’ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ нСсколько элСмСнтов списка

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²ΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ элСмСнты Π² список, Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ замСняя.ΠŸΡ€ΠΎΡΡ‚ΠΎ ΡƒΠΊΠ°ΠΆΠΈΡ‚Π΅ срСз Π½ΡƒΠ»Π΅Π²ΠΎΠΉ Π΄Π»ΠΈΠ½Ρ‹.

  # Π’ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π² Π½Π°Ρ‡Π°Π»ΠΎ
L = ['a', 'b', 'c']
L [: 0] = [1, 2, 3]
ΠΏΠ΅Ρ‡Π°Ρ‚ΡŒ (L)
# Π’Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ [1, 2, 3, 'a', 'b', 'c']

# Π’ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π² ΠΊΠΎΠ½Π΅Ρ†
L = ['a', 'b', 'c']
L [len (L):] = [1, 2, 3]
ΠΏΠ΅Ρ‡Π°Ρ‚ΡŒ (L)
# ΠŸΠ΅Ρ‡Π°Ρ‚Π°Π΅Ρ‚ ['a', 'b', 'c', 1, 2, 3]  

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²ΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ элСмСнты Π² сСрСдину списка, сохраняя ΠΊΠ°ΠΊ Π½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹ΠΉ, Ρ‚Π°ΠΊ ΠΈ ΠΊΠΎΠ½Π΅Ρ‡Π½Ρ‹ΠΉ индСксы срСза ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹ΠΌΠΈ.

  # Вставка посСрСдинС
L = ['a', 'b', 'c']
L [1: 1] = [1, 2, 3]
ΠΏΠ΅Ρ‡Π°Ρ‚ΡŒ (L)
# ΠŸΠ΅Ρ‡Π°Ρ‚ΡŒ ['a', 1, 2, 3, 'b', 'c']  

Π£Π΄Π°Π»Π΅Π½ΠΈΠ΅ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… элСмСнтов списка

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ нСсколько элСмСнтов ΠΈΠ· сСрСдины списка, Π½Π°Π·Π½Π°Ρ‡ΠΈΠ² ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚ пустому список.

  L = ['a', 'b', 'c', 'd', 'e']
L [1: 5] = []
ΠΏΠ΅Ρ‡Π°Ρ‚ΡŒ (L)
# Π’Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ ['a']  

Π’Ρ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ del с Ρ‚Π΅ΠΌ ΠΆΠ΅ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚ΠΎΠΌ.

  L = ['a', 'b', 'c', 'd', 'e']
дСль Π› [1: 5]
ΠΏΠ΅Ρ‡Π°Ρ‚ΡŒ (L)
# ΠŸΠ΅Ρ‡Π°Ρ‚Π°Π΅Ρ‚ ['a']  

ΠšΠ»ΠΎΠ½ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΠ»ΠΈ ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ список

Когда Π²Ρ‹ выполняСтС new_List = old_List , Ρƒ вас фактичСски Π½Π΅Ρ‚ Π΄Π²ΡƒΡ… списков. ΠŸΡ€ΠΈΡΠ²ΠΎΠ΅Π½ΠΈΠ΅ просто ΠΊΠΎΠΏΠΈΡ€ΡƒΠ΅Ρ‚ ссылку Π½Π° список, Π° Π½Π΅ сам список. Π˜Ρ‚Π°ΠΊ, new_List ΠΈ old_List относятся ΠΊ ΠΎΠ΄Π½ΠΎΠΌΡƒ ΠΈ Ρ‚ΠΎΠΌΡƒ ΠΆΠ΅ списку послС присвоСния.

Для фактичСского копирования списка ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ срСза (Ρ‚Π°ΠΊΠΆΠ΅ извСстный ΠΊΠ°ΠΊ нСглубокая копия).

  L1 = ['a', 'b', 'c', 'd', 'e']
L2 = L1 [:]
ΠΏΠ΅Ρ‡Π°Ρ‚ΡŒ (L2)
# ΠŸΠ΅Ρ‡Π°Ρ‚Π°Π΅Ρ‚ ['a', 'b', 'c', 'd', 'e']
ΠΏΠ΅Ρ‡Π°Ρ‚ΡŒ (L2 это L1)
# ΠŸΠ΅Ρ‡Π°Ρ‚Π°Π΅Ρ‚ False  

.

Python Indexing and Slicing for Lists and Other Sequential Types

List, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, самый ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ΠΉ ΠΈ распространСнный Ρ‚ΠΈΠΏ Π² Python. Одна ΠΈΠ· ΠΏΡ€ΠΈΡ‡ΠΈΠ½, ΠΏΠΎΡ‡Π΅ΠΌΡƒ это Ρ‚Π°ΠΊ ΡƒΠ΄ΠΎΠ±Π½ΠΎ, — это нотация Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚ΠΎΠ² Python. ΠšΠΎΡ€ΠΎΡ‡Π΅ говоря, Π½Π°Ρ€Π΅Π·ΠΊΠ° — это Π³ΠΈΠ±ΠΊΠΈΠΉ инструмСнт для создания Π½ΠΎΠ²Ρ‹Ρ… списков ΠΈΠ· ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ списка.

Python ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ ΡΡ€Π΅Π·Π½ΡƒΡŽ Π½ΠΎΡ‚Π°Ρ†ΠΈΡŽ для любого ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° Π΄Π°Π½Π½Ρ‹Ρ…, Ρ‚Π°ΠΊΠΎΠ³ΠΎ ΠΊΠ°ΠΊ списки, строки, ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠΈ, Π±Π°ΠΉΡ‚Ρ‹, Π±Π°ΠΉΡ‚ΠΎΠ²Ρ‹Π΅ массивы ΠΈ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Ρ‹. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, любая новая структура Π΄Π°Π½Π½Ρ‹Ρ… ΠΌΠΎΠΆΠ΅Ρ‚ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ свою ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΡƒ. Π­Ρ‚ΠΎ ΡˆΠΈΡ€ΠΎΠΊΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ (ΠΈ злоупотрСбляСт) Π² Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°Ρ… NumPy ΠΈ Pandas, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ‚Π°ΠΊ популярны Π² машинном ΠΎΠ±ΡƒΡ‡Π΅Π½ΠΈΠΈ ΠΈ Π½Π°ΡƒΠΊΠ΅ ΠΎ Π΄Π°Π½Π½Ρ‹Ρ….Π­Ρ‚ΠΎ Ρ…ΠΎΡ€ΠΎΡˆΠΈΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Β«Π½Π°ΡƒΡ‡ΠΈΡ‚ΡŒΡΡ ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π·, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π²Π΅Π·Π΄Π΅Β».

Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ ΠΌΡ‹ сосрСдоточимся Π½Π° опСрациях индСксирования ΠΈ Π½Π°Ρ€Π΅Π·ΠΊΠΈ списков Python. Π‘ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΡ‹ обсудим, ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для любого ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° Π΄Π°Π½Π½Ρ‹Ρ…. Волько измСняСмыС ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ присваивания ΠΈ удалСния Π½Π΅ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΠΌΡ‹ ΠΊ нСизмСняСмым Ρ‚ΠΈΠΏΠ°ΠΌ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚Π΅ΠΉ, Ρ‚Π°ΠΊΠΈΠΌ ΠΊΠ°ΠΊ ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠΈ, строки, Π±Π°ΠΉΡ‚Ρ‹ ΠΈ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Ρ‹.

Π˜Π½Π΄Π΅ΠΊΡΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅

ΠŸΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ ΠΎΠ±ΡΡƒΠΆΠ΄Π°Ρ‚ΡŒ ΡΡ€Π΅Π·Π½ΡƒΡŽ Π½ΠΎΡ‚Π°Ρ†ΠΈΡŽ, Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Ρ…ΠΎΡ€ΠΎΡˆΠΎ Ρ€Π°Π·Π±ΠΈΡ€Π°Ρ‚ΡŒΡΡ Π² индСксировании ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ².

Π’ Python список ΠΏΠΎΡ…ΠΎΠΆ Π½Π° массивы Π² Π΄Ρ€ΡƒΠ³ΠΈΡ… языках сцСнариСв (Ruby, JavaScript, PHP). Он позволяСт Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ пСрСчислимый Π½Π°Π±ΠΎΡ€ элСмСнтов Π² ΠΎΠ΄Π½ΠΎΠΌ мСстС ΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ΡŒ доступ ΠΊ элСмСнту ΠΏΠΎ Π΅Π³ΠΎ ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ — индСксу.

Рассмотрим простой ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

>>> colors = ['красный', 'Π·Π΅Π»Π΅Π½Ρ‹ΠΉ', 'синий', 'ΠΆΠ΅Π»Ρ‚Ρ‹ΠΉ', 'Π±Π΅Π»Ρ‹ΠΉ', 'Ρ‡Π΅Ρ€Π½Ρ‹ΠΉ']
 

Π—Π΄Π΅ΡΡŒ ΠΌΡ‹ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠ»ΠΈ список Ρ†Π²Π΅Ρ‚ΠΎΠ². ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ элСмСнт Π² спискС ΠΈΠΌΠ΅Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ (Π½Π°Π·Π²Π°Π½ΠΈΠ΅ Ρ†Π²Π΅Ρ‚Π°) ΠΈ индСкс (Π΅Π³ΠΎ ΠΏΠΎΠ·ΠΈΡ†ΠΈΡŽ Π² спискС). Python ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ индСксированиС с Π½ΡƒΠ»Π΅Π²Ρ‹ΠΌ отсчСтом .Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ элСмСнт (Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ «красный») ΠΈΠΌΠ΅Π΅Ρ‚ индСкс 0, Π²Ρ‚ΠΎΡ€ΠΎΠΉ (Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Β«Π·Π΅Π»Π΅Π½Ρ‹ΠΉΒ») ΠΈΠΌΠ΅Π΅Ρ‚ индСкс 1 ΠΈ Ρ‚Π°ΠΊ Π΄Π°Π»Π΅Π΅.

Для доступа ΠΊ элСмСнту ΠΏΠΎ Π΅Π³ΠΎ индСксу Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π½Ρ‹Π΅ скобки:

>>> colors = ['красный', 'Π·Π΅Π»Π΅Π½Ρ‹ΠΉ', 'синий', 'ΠΆΠ΅Π»Ρ‚Ρ‹ΠΉ', 'Π±Π΅Π»Ρ‹ΠΉ', 'Ρ‡Π΅Ρ€Π½Ρ‹ΠΉ']
>>> Ρ†Π²Π΅Ρ‚Π° [0]
'красный'
>>> Ρ†Π²Π΅Ρ‚Π° [1]
'Π·Π΅Π»Π΅Π½Ρ‹ΠΉ'
>>> Ρ†Π²Π΅Ρ‚Π° [5]
'Ρ‡Π΅Ρ€Π½Ρ‹ΠΉ'
 

ΠžΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ индСксы

Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ индСксации Π»Π΅Π³ΠΊΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ любой элСмСнт ΠΏΠΎ Π΅Π³ΠΎ ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ. Π­Ρ‚ΠΎ ΡƒΠ΄ΠΎΠ±Π½ΠΎ, Ссли ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ ΠΏΠΎΠ·ΠΈΡ†ΠΈΡŽ ΠΈΠ· Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ° списка.Но Ρ‡Ρ‚ΠΎ, Ссли ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ Π²Π·ΡΡ‚ΡŒ послСдний элСмСнт списка? Или прСдпослСдний элСмСнт? Π’ этом случаС ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ ΠΏΠ΅Ρ€Π΅Ρ‡ΠΈΡΠ»ΠΈΡ‚ΡŒ элСмСнты ΠΈΠ· хвоста списка.

Для выполнСния этого трСбования сущСствуСт ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½Π°Ρ индСксация. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, вмСсто использования индСксов ΠΎΡ‚ нуля ΠΈ Π²Ρ‹ΡˆΠ΅ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ индСксы ΠΎΡ‚ -1 ΠΈ Π½ΠΈΠΆΠ΅.

Π’ систСмС ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠΉ индСксации -1 соотвСтствуСт послСднСму элСмСнту списка (Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Β«Ρ‡Π΅Ρ€Π½Ρ‹ΠΉΒ»), -2 — прСдпослСднСму (Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Β«Π±Π΅Π»Ρ‹ΠΉΒ») ΠΈ Ρ‚Π°ΠΊ Π΄Π°Π»Π΅Π΅.

>>> colors = ['красный', 'Π·Π΅Π»Π΅Π½Ρ‹ΠΉ', 'синий', 'ΠΆΠ΅Π»Ρ‚Ρ‹ΠΉ', 'Π±Π΅Π»Ρ‹ΠΉ', 'Ρ‡Π΅Ρ€Π½Ρ‹ΠΉ']
>>> Ρ†Π²Π΅Ρ‚Π° [-1]
'Ρ‡Π΅Ρ€Π½Ρ‹ΠΉ'
>>> Ρ†Π²Π΅Ρ‚Π° [-2]
'Π±Π΅Π»Ρ‹ΠΉ'
>>> Ρ†Π²Π΅Ρ‚Π° [-6]
'красный'
 

НазначСниС

РаньшС ΠΌΡ‹ использовали индСксированиС Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для доступа ΠΊ содСрТимому ячСйки списка.Но Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ содСрТимоС ячСйки с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ присваивания:

>>> ΠΊΠΎΡ€Π·ΠΈΠ½Π° = ['Ρ…Π»Π΅Π±', 'масло', 'ΠΌΠΎΠ»ΠΎΠΊΠΎ']
>>> ΠΊΠΎΡ€Π·ΠΈΠ½Π° [0] = 'Ρ‚ΠΎΡ€Ρ‚'
>>> ΠΊΠΎΡ€Π·ΠΈΠ½Π°
['Ρ‚ΠΎΡ€Ρ‚', 'масло', 'ΠΌΠΎΠ»ΠΎΠΊΠΎ']
>>> ΠΊΠΎΡ€Π·ΠΈΠ½Π° [-1] = 'Π²ΠΎΠ΄Π°'
>>> ΠΊΠΎΡ€Π·ΠΈΠ½Π°
['Ρ‚ΠΎΡ€Ρ‚', 'масло', 'Π²ΠΎΠ΄Π°']
 

ΠœΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ свободно ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒΠ½ΡƒΡŽ ΠΈΠ»ΠΈ ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½ΡƒΡŽ ΠΈΠ½Π΄Π΅ΠΊΡΠ°Ρ†ΠΈΡŽ для присвоСния.

Π£Π΄Π°Π»Π΅Π½ΠΈΠ΅

ΠœΡ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅ΠΌ Π»Π΅Π³ΠΊΠΎ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ любой элСмСнт ΠΈΠ· списка с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ индСксации ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° del :

>>> ΠΊΠΎΡ€Π·ΠΈΠ½Π° = ['Ρ…Π»Π΅Π±', 'масло', 'ΠΌΠΎΠ»ΠΎΠΊΠΎ']
>>> ΠΊΠΎΡ€Π·ΠΈΠ½Π° [0]
>>> ΠΊΠΎΡ€Π·ΠΈΠ½Π°
['масло', 'молоко']
>>> дСль ΠΊΠΎΡ€Π·ΠΈΠ½Π° [1]
>>> ΠΊΠΎΡ€Π·ΠΈΠ½Π°
['масло']
 

Π˜Π½Π΄Π΅ΠΊΡΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ для Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ²

ΠžΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ индСксирования Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для чтСния ΠΎΡ‚Π»ΠΈΡ‡Π½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ для всСх ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ².Но ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ присваивания ΠΈ удалСния Π½Π΅ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΠΌΡ‹ ΠΊ нСизмСняСмым ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ Ρ‚ΠΈΠΏΠ°ΠΌ.

Slice Notation

Как Π±Ρ‹Π»ΠΎ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ, индСксация позволяСт Π²Π°ΠΌ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ доступ / ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ / ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄Π½Ρƒ ячСйку списка. Π§Ρ‚ΠΎ, Ссли ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ подсписок списка. Или ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ ΠΎΠ±Π½ΠΎΠ²ΠΈΡ‚ΡŒ сразу ΠΊΡƒΡ‡Ρƒ ячССк? Или ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ Π²ΠΏΠ°ΡΡ‚ΡŒ Π² Π±Π΅Π·ΡƒΠΌΠΈΠ΅ ΠΈ Ρ€Π°ΡΡˆΠΈΡ€ΠΈΡ‚ΡŒ список ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½Ρ‹ΠΌ количСством Π½ΠΎΠ²Ρ‹Ρ… ячССк Π² любой ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ?

Π­Ρ‚ΠΈ ΠΈ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ интСрСсныС Ρ‚Ρ€ΡŽΠΊΠΈ ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ срСзной Π½ΠΎΡ‚Π°Ρ†ΠΈΠΈ. Π”Π°Π²Π°ΠΉΡ‚Π΅ посмотрим Π½Π° эту Ρ‚Π΅ΠΌΡƒ.

Π‘Π°Π·ΠΎΠ²ΠΎΠ΅ использованиС срСзов

Π”Π°Π²Π°ΠΉΡ‚Π΅ создадим основной список:

>>> nums = [10, 20, 30, 40, 50, 60, 70, 80, 90]
 

Π§Ρ‚ΠΎ, Ссли ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ Π²Π·ΡΡ‚ΡŒ подсписок ΠΈΠ· списка nums ? Π­Ρ‚ΠΎ нСслоТно ΠΏΡ€ΠΈ использовании срСза:

>>> nums = [10, 20, 30, 40, 50, 60, 70, 80, 90]
>>> some_nums = число [2: 7]
>>> some_nums
[30, 40, 50, 60, 70]
 

Π˜Ρ‚Π°ΠΊ, Π²ΠΎΡ‚ наш ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ срСза: 2: 7 . ΠŸΠΎΠ»Π½Ρ‹ΠΉ синтаксис срСза: start: stop: step . Π½Π°Ρ‡Π°Π»ΠΎ относится ΠΊ индСксу элСмСнта, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΊΠ°ΠΊ Π½Π°Ρ‡Π°Π»ΠΎ нашСго срСза. stop относится ΠΊ индСксу элСмСнта, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΎΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ нСпосрСдствСнно ΠΏΠ΅Ρ€Π΅Π΄ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠ΅ΠΌ нашСго срСза. шаг позволяСт Π²Π°ΠΌ Π²Π·ΡΡ‚ΡŒ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ n-ΠΉ элСмСнт Π² Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π΅ start: stop .

Π’ нашСм ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ start Ρ€Π°Π²Π½ΠΎ 2 , поэтому наш срСз начинаСтся со значСния 30 . стоп — это 7 , поэтому послСдний элСмСнт срСза — 70 с индСксом 6 .Π’ ΠΊΠΎΠ½Ρ†Π΅ ΠΊΠΎΠ½Ρ†ΠΎΠ², slice создаСт Π½ΠΎΠ²Ρ‹ΠΉ список (ΠΌΡ‹ Π½Π°Π·Π²Π°Π»ΠΈ Π΅Π³ΠΎ some_nums ) с Π²Ρ‹Π±Ρ€Π°Π½Π½Ρ‹ΠΌΠΈ элСмСнтами.

ΠœΡ‹ Π½Π΅ использовали шаг Π² нашСм срСзС, поэтому ΠΌΡ‹ Π½Π΅ пропустили Π½ΠΈ ΠΎΠ΄ΠΈΠ½ элСмСнт ΠΈ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΈ всС значСния Π² ΠΏΡ€Π΅Π΄Π΅Π»Π°Ρ… Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π°.

Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ срСзов ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΠ·Π²Π»Π΅Ρ‡ΡŒ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½ΡƒΡŽ Ρ‡Π°ΡΡ‚ΡŒ списка, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

>>> nums = [10, 20, 30, 40, 50, 60, 70, 80, 90]
>>> число [0: 4]
[10, 20, 30, 40]
 

Π—Π΄Π΅ΡΡŒ ΠΌΡ‹ Π½Π°Ρ‡ΠΈΠ½Π°Π΅ΠΌ с ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ элСмСнта (индСкс 0 ) ΠΈ Π²Π΅Π΄Π΅ΠΌ список Π΄ΠΎ элСмСнта с индСксом 4 .

ВзятиС n ΠΏΠ΅Ρ€Π²Ρ‹Ρ… элСмСнтов списка

Нотация срСза позволяСт ΠΏΡ€ΠΎΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ любой элСмСнт ΠΏΠΎΠ»Π½ΠΎΠ³ΠΎ синтаксиса. Если ΠΏΡ€ΠΎΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ Π½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹ΠΉ Π½ΠΎΠΌΠ΅Ρ€ , Ρ‚ΠΎ ΠΎΠ½ начинаСтся с 0 индСкс :

>>> nums = [10, 20, 30, 40, 50, 60, 70, 80, 90]
>>> число [: 5]
[10, 20, 30, 40, 50]
 

Π˜Ρ‚Π°ΠΊ, nums [: 5] эквивалСнтно nums [0: 5] . Π­Ρ‚Π° комбинация прСдставляСт собой ΡƒΠ΄ΠΎΠ±Π½Ρ‹ΠΉ ярлык для получСния n ΠΏΠ΅Ρ€Π²Ρ‹Ρ… элСмСнтов списка.

ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ n послСдних элСмСнтов списка

ΠžΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ индСксы ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ Π½Π°ΠΌ Π»Π΅Π³ΠΊΠΎ Π±Ρ€Π°Ρ‚ΡŒ n-послСдниС элСмСнты списка:

>>> nums = [10, 20, 30, 40, 50, 60, 70, 80, 90]
>>> числа [-3:]
[70, 80, 90]
 

Π—Π΄Π΅ΡΡŒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ stop пропускаСтся.Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Π²Ρ‹ Π±Π΅Ρ€Π΅Ρ‚Π΅ ΠΎΡ‚ Π½Π°Ρ‡Π°Π»Π° ΠΏΠΎΠ·ΠΈΡ†ΠΈΡŽ Π΄ΠΎ ΠΊΠΎΠ½Ρ†Π° списка. НачинаСм с Ρ‚Ρ€Π΅Ρ‚ΡŒΠ΅Π³ΠΎ элСмСнта с ΠΊΠΎΠ½Ρ†Π° (Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ 70 с индСксом -3 ) ΠΈ Π΄ΠΎΠ²ΠΎΠ΄ΠΈΠΌ всС Π΄ΠΎ ΠΊΠΎΠ½Ρ†Π°.

ΠœΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ свободно ΡΠΌΠ΅ΡˆΠΈΠ²Π°Ρ‚ΡŒ ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΈ ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ индСксы Π² позициях start ΠΈ stop :

>>> nums = [10, 20, 30, 40, 50, 60, 70, 80, 90]
>>> число [1: -1]
[20, 30, 40, 50, 60, 70, 80]
>>> числа [-3: 8]
[70, 80]
>>> числа [-5: -1]
[50, 60, 70, 80]
 

ВзятиС всСх, ΠΊΡ€ΠΎΠΌΠ΅ n послСдних элСмСнтов списка

Π•Ρ‰Π΅ ΠΎΠ΄Π½ΠΎ Ρ…ΠΎΡ€ΠΎΡˆΠ΅Π΅ использованиС ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… индСксов:

>>> nums = [10, 20, 30, 40, 50, 60, 70, 80, 90]
>>> число [: - 2]
[10, 20, 30, 40, 50, 60, 70]
 

ΠœΡ‹ Π±Π΅Ρ€Π΅ΠΌ всС, ΠΊΡ€ΠΎΠΌΠ΅ Π΄Π²ΡƒΡ… послСдних элСмСнтов исходного списка.

ВзятиС ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ n-Π³ΠΎ элСмСнта списка

Π§Ρ‚ΠΎ, Ссли ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ ΠΈΠΌΠ΅Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ 2-ΠΉ элСмСнт ΠΈΠ· чисСл ? Π—Π΄Π΅ΡΡŒ вступаСт Π² ΠΈΠ³Ρ€Ρƒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ step :

>>> nums = [10, 20, 30, 40, 50, 60, 70, 80, 90]
>>> число [:: 2]
[10, 30, 50, 70, 90]
 

Π—Π΄Π΅ΡΡŒ ΠΌΡ‹ опускаСм start / stop ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ step . ΠŸΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡ start , ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΡ€ΠΎΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ элСмСнты:

>>> число [1 :: 2]
[20, 40, 60, 80]
 

И Ссли ΠΌΡ‹ Π½Π΅ Ρ…ΠΎΡ‚ΠΈΠΌ Π²ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ элСмСнты Π² ΠΊΠΎΠ½Π΅Ρ†, ΠΌΡ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅ΠΌ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ stop :

>>> число [1: -3: 2]
[20, 40, 60]
 

ИспользованиС ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ шага ΠΈ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠ³ΠΎ списка

ΠœΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ шаг для получСния ΠΏΠ΅Ρ€Π΅Π²Π΅Ρ€Π½ΡƒΡ‚ΠΎΠ³ΠΎ списка:

>>> nums = [10, 20, 30, 40, 50, 60, 70, 80, 90]
>>> число [:: - 1]
[90, 80, 70, 60, 50, 40, 30, 20, 10]
 

ΠžΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ шаг измСняСт способ, нотация срСза Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚.Π­Ρ‚ΠΎ заставляСт срСз ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒΡΡ ΠΈΠ· ΠΊΠΎΠ½Ρ†Π° списка. Π˜Ρ‚Π°ΠΊ, ΠΎΠ½ ΠΈΠ΄Π΅Ρ‚ ΠΎΡ‚ послСднСго элСмСнта ΠΊ ΠΏΠ΅Ρ€Π²ΠΎΠΌΡƒ. Π’ΠΎΡ‚ ΠΏΠΎΡ‡Π΅ΠΌΡƒ ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ ΠΏΠ΅Ρ€Π΅Π²Π΅Ρ€Π½ΡƒΡ‚Ρ‹ΠΉ список с ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ шагом.

Из-Π·Π° этой особСнности, start ΠΈ stop Ρ‚Π°ΠΊΠΆΠ΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Ρ€Π°ΡΠΏΠΎΠ»Π°Π³Π°Ρ‚ΡŒΡΡ справа Π½Π°Π»Π΅Π²ΠΎ. НапримСр, Ссли Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΈΠΌΠ΅Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅Π²Π΅Ρ€Π½ΡƒΡ‚Ρ‹ΠΉ список, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ начинаСтся с 80 :

>>> nums = [10, 20, 30, 40, 50, 60, 70, 80, 90]
>>> число [-2 :: - 1]
[80, 70, 60, 50, 40, 30, 20, 10]
 

Π˜Ρ‚Π°ΠΊ, ΠΌΡ‹ Π½Π°Ρ‡ΠΈΠ½Π°Π΅ΠΌ с элСмСнта -2 (Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ 80 ) ΠΈ ΠΈΠ΄Π΅ΠΌ справа Π½Π°Π»Π΅Π²ΠΎ, собирая всС элСмСнты Π² ΠΏΠ΅Ρ€Π΅Π²Π΅Ρ€Π½ΡƒΡ‚ΠΎΠΌ спискС.

ΠœΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ stop , Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΠΏΡ€ΠΈΠ΅ΠΌ ΠΏΠ΅Ρ€Π΅Π΄ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ элСмСнтом. НапримСр, Π½Π΅ Π±ΡƒΠ΄Π΅ΠΌ Π²ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ 20 ΠΈ 10 значСния:

>>> nums = [10, 20, 30, 40, 50, 60, 70, 80, 90]
>>> число [-2: 1: -1]
[80, 70, 60, 50, 40, 30]
 

ΠœΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ 1 для стоп-индСкса , ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ являСтся элСмСнтом со Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ 20 . Π˜Ρ‚Π°ΠΊ, ΠΈΠ΄Π΅ΠΌ ΠΎΡ‚ 80 Π΄ΠΎ 30, Π½Π΅ считая значСния 20 .

НСмного сбиваСт с Ρ‚ΠΎΠ»ΠΊΡƒ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈ ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠΌ шагС , индСкс остановки находится ΠΏΠ΅Ρ€Π΅Π΄ start .ΠžΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ шаг ΠΏΠ΅Ρ€Π΅Π²ΠΎΡ€Π°Ρ‡ΠΈΠ²Π°Π΅Ρ‚ всС с Π½ΠΎΠ³ Π½Π° Π³ΠΎΠ»ΠΎΠ²Ρƒ.

ΠšΠΎΠ½Π΅Ρ‡Π½ΠΎ, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½Ρ‹ΠΉ ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ шаг :

>>> nums = [10, 20, 30, 40, 50, 60, 70, 80, 90]
>>> число [-2: 1: -3]
[80, 50]
 

Π‘Ρ€Π΅Π· ΠΈ ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅

Π‘Π»Π΅Π΄ΡƒΠ΅Ρ‚ ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° ΠΎΠ΄Π½Ρƒ Π²Π°ΠΆΠ½ΡƒΡŽ Π²Π΅Ρ‰ΡŒ — срСз списка создаСт Π½Π΅Π³Π»ΡƒΠ±ΠΎΠΊΡƒΡŽ копию исходного списка. Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ бСзопасно ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π½ΠΎΠ²Ρ‹ΠΉ список, ΠΈ это Π½Π΅ повлияСт Π½Π° исходный список:

>>> nums = [10, 20, 30, 40, 50, 60, 70, 80, 90]
>>> first_five = число [0: 5]
>>> first_five [2] = 3
>>> first_five
[10, 20, 3, 40, 50]
>>> число
[10, 20, 30, 40, 50, 60, 70, 80, 90]
 

НСсмотря Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ ΠΈΠ·ΠΌΠ΅Π½ΠΈΠ»ΠΈ элСмСнт ΠΏΠΎΠ΄ индСксом 2 , это Π½Π΅ влияСт Π½Π° список nums , ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ first_five list — это частичная копия списка nums .

БущСствуСт самая короткая Ρ„ΠΎΡ€ΠΌΠ° записи срСза — просто Π΄Π²ΠΎΠ΅Ρ‚ΠΎΡ‡ΠΈΠ΅ nums [:] .

>>> nums = [10, 20, 30, 40, 50, 60, 70, 80, 90]
>>> nums_copy = nums [:]
>>> nums_copy [0] = 33
>>> nums_copy
[33, 20, 30, 40, 50, 60, 70, 80, 90]
>>> число
[10, 20, 30, 40, 50, 60, 70, 80, 90]
 

Π‘ΠΎΠ·Π΄Π°Π΅Ρ‚ ΠΌΠ΅Π»ΠΊΡƒΡŽ копию всСго списка ΠΈ являСтся Ρ…ΠΎΡ€ΠΎΡˆΠΈΠΌ сокращСниСм, ΠΊΠΎΠ³Π΄Π° Π²Π°ΠΌ Π½ΡƒΠΆΠ½Π° копия исходного списка.

Slice Object

Но Ρ‡Ρ‚ΠΎ, Ссли ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ΄ΠΈΠ½ ΠΈ Ρ‚ΠΎΡ‚ ΠΆΠ΅ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚ снова ΠΈ снова.Π•ΡΡ‚ΡŒ Π»ΠΈ способ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ срСза вмСсто использования Ρ‚ΠΎΠ»ΡŒΠΊΠΎ синтаксичСской Ρ„ΠΎΡ€ΠΌΡ‹?

Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ slice function:

>>> five_items_after_second = slice (2, 2 + 5)
>>> nums = [10, 20, 30, 40, 50, 60, 70, 80, 90]
>>> colors = ['красный', 'Π·Π΅Π»Π΅Π½Ρ‹ΠΉ', 'синий', 'ΠΆΠ΅Π»Ρ‚Ρ‹ΠΉ', 'Π±Π΅Π»Ρ‹ΠΉ', 'Ρ‡Π΅Ρ€Π½Ρ‹ΠΉ', 'сСрСбристый']
>>> число [five_items_after_second]
[30, 40, 50, 60, 70]
>>> Ρ†Π²Π΅Ρ‚Π° [five_items_after_second]
["синий", "ΠΆΠ΅Π»Ρ‚Ρ‹ΠΉ", "Π±Π΅Π»Ρ‹ΠΉ", "Ρ‡Π΅Ρ€Π½Ρ‹ΠΉ", "сСрСбристый"]
 

slice Ѐункция ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ Π² Ρ‚ΠΎΠΌ ΠΆΠ΅ порядкС, Ρ‡Ρ‚ΠΎ ΠΈ Π² Π½ΠΎΡ‚Π°Ρ†ΠΈΠΈ срСза, ΠΈ Ссли Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΠΏΡ€ΠΎΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΠΊΠ°ΠΊΠΎΠΉ-Π»ΠΈΠ±ΠΎ элСмСнт, просто ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ None :

>>> nums = [10, 20, 30, 40, 50, 60, 70, 80, 90]
>>> all_but_two_last = slice (НСт, -2)
>>> число [all_but_two_last]
[10, 20, 30, 40, 50, 60, 70]
>>> reversed = slice (НСт, НСт, -1)
>>> числа [Π² ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠΌ порядкС]
[90, 80, 70, 60, 50, 40, 30, 20, 10]
 

НазначСниС срСзов

Python ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ назначСния срСзов, Ρ‡Ρ‚ΠΎ позволяСт Π½Π°ΠΌ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ ряд Π°ΠΊΠΊΡƒΡ€Π°Ρ‚Π½Ρ‹Ρ… ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ Π½Π°Π΄ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΌ списком.Π’ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΡ… ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ срСза, ΠΎΠ½ΠΈ ΠΈΠ·ΠΌΠ΅Π½ΡΡŽΡ‚ исходный ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π½Π° мСстС. Π’ΠΎΡ‚ ΠΏΠΎΡ‡Π΅ΠΌΡƒ ΠΎΠ½ΠΈ Π½Π΅ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΠΌΡ‹ ΠΊ нСизмСняСмым ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ Ρ‚ΠΈΠΏΠ°ΠΌ.

Π—Π°ΠΌΠ΅Ρ‰Π°ΡŽΡ‰Π°Ρ Ρ‡Π°ΡΡ‚ΡŒ списка

НазначСниС срСза позволяСт Π²Π°ΠΌ ΠΎΠ±Π½ΠΎΠ²ΠΈΡ‚ΡŒ Ρ‡Π°ΡΡ‚ΡŒ списка Π½ΠΎΠ²Ρ‹ΠΌΠΈ значСниями:

>>> nums = [10, 20, 30, 40, 50, 60, 70, 80, 90]
>>> число [: 4] = [1,2,3,4]
>>> число
[1, 2, 3, 4, 50, 60, 70, 80, 90]
 

Π—Π΄Π΅ΡΡŒ ΠΌΡ‹ Π½Π΅ мСняСм количСство элСмСнтов Π² спискС. ΠžΠ±Π½ΠΎΠ²Π»ΡΡŽΡ‚ΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ значСния списка.

Π—Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΈ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Ρ€Π°Π·ΠΌΠ΅Ρ€ части списка

ВмСсто этого ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π·Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Ρ‡Π°ΡΡ‚ΡŒ списка большим Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚ΠΎΠΌ:

>>> nums = [10, 20, 30, 40, 50, 60, 70, 80, 90]
>>> число [: 4] = [1,2,3,4,5,6,7]
>>> число
[1, 2, 3, 4, 5, 6, 7, 50, 60, 70, 80, 90]
 

Π’ этом случаС ΠΌΡ‹ Ρ€Π°ΡΡˆΠΈΡ€ΡΠ΅ΠΌ исходный список.

Π’Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ больший кусок мСньшим количСством элСмСнтов:

>>> nums = [10, 20, 30, 40, 50, 60, 70, 80, 90]
>>> число [: 4] = [1]
>>> число
[1, 50, 60, 70, 80, 90]
 
Π—Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ n-ΠΉ элСмСнт

Π”ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π° шагС позволяСт Π·Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ n-ΠΉ элСмСнт Π½ΠΎΠ²Ρ‹ΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ:

>>> nums = [10, 20, 30, 40, 50, 60, 70, 80, 90]
>>> число [:: 2] = [1,1,1,1,1]
>>> число
[1, 20, 1, 40, 1, 60, 1, 80, 1]
 

ИспользованиС назначСния срСзов с шагом шаг устанавливаСт ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅ для списка, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΡ‹ прСдоставляСм для назначСния.ΠŸΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»Π΅Π½Π½Ρ‹ΠΉ список Π΄ΠΎΠ»ΠΆΠ΅Π½ Ρ‚ΠΎΡ‡Π½ΠΎ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ количСству замСняСмых элСмСнтов. Если Π΄Π»ΠΈΠ½Π° Π½Π΅ совпадаСт, Python Π²Ρ‹Π΄Π°Π΅Ρ‚ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅:

>>> nums = [10, 20, 30, 40, 50, 60, 70, 80, 90]
>>> число [:: 2] = [1,1,1]
ΠžΡ‚ΡΠ»Π΅ΠΆΠΈΠ²Π°Π½ΠΈΠ΅ (послСдний Π²Ρ‹Π·ΠΎΠ² послСдний):
  Π€Π°ΠΉΠ» "", строка 1, Π²
ValueError: ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ° Π½Π°Π·Π½Π°Ρ‡ΠΈΡ‚ΡŒ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° 3 Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½Π½ΠΎΠΌΡƒ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Ρƒ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° 5
 

ΠœΡ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ шаг :

>>> nums = [10, 20, 30, 40, 50, 60, 70, 80, 90]
>>> число [:: - 2] = [1,2,3,4,5]
>>> число
[5, 20, 4, 40, 3, 60, 2, 80, 1]
 

ΠŸΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡ значСния start ΠΈ stop , ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΡΡƒΠ·ΠΈΡ‚ΡŒ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ Π·Π°ΠΌΠ΅Π½Ρ‹:

>>> nums = [10, 20, 30, 40, 50, 60, 70, 80, 90]
>>> число [1: 5: 2] = [2, 4]
>>> число
[10, 2, 30, 4, 50, 60, 70, 80, 90]
 

Π£Π΄Π°Π»Π΅Π½ΠΈΠ΅ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Π°

ΠœΡ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ del для удалСния Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Π° ΠΈΠ· списка:

>>> nums = [10, 20, 30, 40, 50, 60, 70, 80, 90]
>>> del nums [3: 7]
>>> число
[10, 20, 30, 80, 90]
 

Π—Π΄Π΅ΡΡŒ ΠΌΡ‹ ΡƒΠ΄Π°Π»ΠΈΠ»ΠΈ ΠΊΡƒΡ‡Ρƒ элСмСнтов Π² сСрСдинС списка nums .

ΠœΡ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ step для Π½Π°Ρ€Π΅Π·ΠΊΠΈ ΠΈ удалСния ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ n-Π³ΠΎ элСмСнта:

>>> nums = [10, 20, 30, 40, 50, 60, 70, 80, 90]
>>> del nums [:: 2]
>>> число
[20, 40, 60, 80]
 

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΏΠΎΠ»Π½Ρ‹ΠΉ синтаксис, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Π³Ρ€Π°Π½ΠΈΡ†Ρ‹ для удаляСмых элСмСнтов:

>>> nums = [10, 20, 30, 40, 50, 60, 70, 80, 90]
>>> del nums [1: 7: 2]
>>> число
[10, 30, 50, 70, 80, 90]
 

Π˜Ρ‚Π°ΠΊ, ΠΌΡ‹ Π½Π°Ρ‡ΠΈΠ½Π°Π΅ΠΌ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ с 20 (индСкс 1) ΠΈ удаляСм ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ 2-ΠΉ элСмСнт Π΄ΠΎ значСния 80 (индСкс 7).

И ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Π° измСняСт Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, это Π½Π΅ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΠΌΠΎ ΠΊ нСизмСняСмым ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ Ρ‚ΠΈΠΏΠ°ΠΌ.

Π‘Π²ΠΎΠ΄ΠΊΠ°

ΠœΡ‹ обсудили Π΄Π²Π΅ ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ со списком: индСксированиС ΠΈ срСз. ОбС ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΈ ΠΈΠΌΠ΅ΡŽΡ‚ Ρ€Π΅ΡˆΠ°ΡŽΡ‰Π΅Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ для эффСктивного использования Python.

Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²Π»Π΅Π½Ρ‹ прСдпосылки для Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ индСксации ΠΈ Π½Π°Ρ€Π΅Π·ΠΊΠΈ Π² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°Ρ… NumPy ndarrays ΠΈ Pandas Series ΠΈ DataFrame . ΠœΠ΅ΠΆΠ΄Ρƒ этими структурами ΠΌΠ½ΠΎΠ³ΠΎ ΠΎΠ±Ρ‰Π΅Π³ΠΎ, Π½ΠΎ Π΅ΡΡ‚ΡŒ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠ½ΠΎΠ³ΠΎ Ρ‚ΠΎΠ½ΠΊΠΈΡ… Ρ€Π°Π·Π»ΠΈΡ‡ΠΈΠΉ ΠΈ ΠΏΠΎΠ΄Π²ΠΎΠ΄Π½Ρ‹Ρ… ΠΊΠ°ΠΌΠ½Π΅ΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±ΡƒΠ΄ΡƒΡ‚ ΠΎΠ±ΡΡƒΠΆΠ΄Π°Ρ‚ΡŒΡΡ Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… ΡΡ‚Π°Ρ‚ΡŒΡΡ…, посвящСнных ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌ машинного обучСния, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΠΊΠΎΠΌΠ°Π½Π΄Π° Railsware.

Если Π²Ρ‹ Π΅Ρ‰Π΅ Π½ΠΎΠ²ΠΈΡ‡ΠΎΠΊ, Π²ΠΎΡ‚ список Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ ΠΈ инструмСнтов, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠΎΠΌΠΎΡ‡ΡŒ Π²Π°ΠΌ Π½Π°Ρ‡Π°Ρ‚ΡŒ с машинного обучСния ΠΈ искусствСнного ΠΈΠ½Ρ‚Π΅Π»Π»Π΅ΠΊΡ‚Π°.

.

15 Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½Π½Ρ‹Ρ… Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚ΠΎΠ²

15 Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½Π½Ρ‹Ρ… Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚ΠΎΠ²

Начиная с Python 1.4, синтаксис Π½Π°Ρ€Π΅Π·ΠΊΠΈ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ
Ρ‚Ρ€Π΅Ρ‚ΠΈΠΉ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ « шаг » ΠΈΠ»ΠΈ « шаг ». НапримСр, это всС
допустимый синтаксис Python: L [1: 10: 2] , L [: - 1: 1] ,
L [:: - 1] . Π­Ρ‚ΠΎ Π±Ρ‹Π»ΠΎ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΎ Π² Python ΠΏΠΎ запросу
Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ Numerical Python, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Ρ‚Ρ€Π΅Ρ‚ΠΈΠΉ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚
ΡˆΠΈΡ€ΠΎΠΊΠΎ. Однако встроСнный Π² Python список, ΠΊΠΎΡ€Ρ‚Π΅ΠΆ ΠΈ строка
Ρ‚ΠΈΠΏΡ‹ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π»ΠΈ эту Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, поэтому
TypeError, Ссли Π²Ρ‹ ΠΏΡ€ΠΎΠ±ΠΎΠ²Π°Π»ΠΈ.Майкл Π₯адсон внСс
ΠΏΠ°Ρ‚Ρ‡, ΠΈΡΠΏΡ€Π°Π²Π»ΡΡŽΡ‰ΠΈΠΉ этот нСдостаток.

НапримСр, Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π»Π΅Π³ΠΊΠΎ ΠΈΠ·Π²Π»Π΅Ρ‡ΡŒ элСмСнты списка, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅
ΠΈΠΌΠ΅ΡŽΡ‚ Ρ‡Π΅Ρ‚Π½Ρ‹Π΅ индСксы:

>>> L = Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ (10)
>>> L [:: 2]
[0, 2, 4, 6, 8]
 

ΠžΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ значСния Ρ‚Π°ΠΊΠΆΠ΅ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ для создания ΠΊΠΎΠΏΠΈΠΈ Ρ‚ΠΎΠ³ΠΎ ΠΆΠ΅ списка Π² ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠΌ порядкС.
ΠΏΡ€ΠΈΠΊΠ°Π·:

>>> L [:: - 1]
[9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
 

Π­Ρ‚ΠΎ Ρ‚Π°ΠΊΠΆΠ΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ для ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠ΅ΠΉ, массивов ΠΈ строк:

>>> s = 'abcd'
>>> s [:: 2]
'ac'
>>> s [:: - 1]
'dcba'
 

Если Ρƒ вас Π΅ΡΡ‚ΡŒ измСняСмая ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ, такая ΠΊΠ°ΠΊ список ΠΈΠ»ΠΈ массив, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅
Π½Π°Π·Π½Π°Ρ‡ΠΈΡ‚ΡŒ ΠΈΠ»ΠΈ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½Π½Ρ‹ΠΉ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚, Π½ΠΎ Π΅ΡΡ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ отличия
ΠΌΠ΅ΠΆΠ΄Ρƒ Π½Π°Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½Π½Ρ‹Ρ… ΠΈ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Ρ… срСзов.ΠŸΡ€ΠΈΡΠ²ΠΎΠ΅Π½ΠΈΠ΅
ΠžΠ±Ρ‹Ρ‡Π½Ρ‹ΠΉ срСз ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для измСнСния Π΄Π»ΠΈΠ½Ρ‹ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ:

>>> a = Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ (3)
>>> Π°
[0, 1, 2]
>>> a [1: 3] = [4, 5, 6]
>>> Π°
[0, 4, 5, 6]
 

Π Π°ΡΡˆΠΈΡ€Π΅Π½Π½Ρ‹Π΅ срСзы Π½Π΅ Ρ‚Π°ΠΊ Π³ΠΈΠ±ΠΊΠΈ. ΠŸΡ€ΠΈ Π½Π°Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΈ Π½Π° Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½Π½Ρ‹ΠΉ
slice список Π² ΠΏΡ€Π°Π²ΠΎΠΉ части ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ
Ρ‚Π°ΠΊΠΎΠ΅ ΠΆΠ΅ количСство элСмСнтов, ΠΊΠ°ΠΊ ΠΈ Π½Π° замСняСмом срСзС:

>>> a = Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ (4)
>>> Π°
[0, 1, 2, 3]
>>> a [:: 2]
[0, 2]
>>> a [:: 2] = [0, -1]
>>> Π°
[0, 1, -1, 3]
>>> a [:: 2] = [0,1,2]
ΠžΡ‚ΡΠ»Π΅ΠΆΠΈΠ²Π°Π½ΠΈΠ΅ (послСдний Π²Ρ‹Π·ΠΎΠ² послСдний):
  Π€Π°ΠΉΠ» "", строка 1, Π²?
ValueError: ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ° Π½Π°Π·Π½Π°Ρ‡ΠΈΡ‚ΡŒ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° 3 Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½Π½ΠΎΠΌΡƒ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Ρƒ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° 2
 

Π£Π΄Π°Π»Π΅Π½ΠΈΠ΅ Π±ΠΎΠ»Π΅Π΅ простоС:

>>> a = Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ (4)
>>> Π°
[0, 1, 2, 3]
>>> a [:: 2]
[0, 2]
>>> дСль а [:: 2]
>>> Π°
[1, 3]
 

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΠΎΠΆΠ½ΠΎ Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ срСзов Π²
__getitem__ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ встроСнных ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚Π΅ΠΉ:

>>> Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ (10).__getitem __ (Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚ (0, 5, 2))
[0, 2, 4]
 

Или ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ срСзов нСпосрСдствСнно Π² индСксах:

>>> Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ (10) [Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚ (0, 5, 2)]
[0, 2, 4]
 

Π§Ρ‚ΠΎΠ±Ρ‹ ΡƒΠΏΡ€ΠΎΡΡ‚ΠΈΡ‚ΡŒ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚Π΅ΠΉ, ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‰ΠΈΡ… Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½Π½ΡƒΡŽ срСзку,
ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ срСза Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΈΠΌΠ΅ΡŽΡ‚ индСксы ΠΌΠ΅Ρ‚ΠΎΠ΄Π° (Π΄Π»ΠΈΠ½Π° ), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅,
учитывая Π΄Π»ΠΈΠ½Ρƒ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ( Π½Π°Ρ‡Π°Π»ΠΎ ,
стоп , шаг )
ΠΊΠΎΡ€Ρ‚Π΅ΠΆ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅Π΄Π°Π½ нСпосрСдствСнно Π²
Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½().
index () ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ ΠΏΡ€ΠΎΠΏΡƒΡ‰Π΅Π½Π½Ρ‹Π΅ ΠΈ выходящиС Π·Π° ΠΏΡ€Π΅Π΄Π΅Π»Ρ‹ индСксы Π²
ΠΌΠ°Π½Π΅Ρ€Π°, совмСстимая с ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΌΠΈ Π»ΠΎΠΌΡ‚ΠΈΠΊΠ°ΠΌΠΈ (ΠΈ Π·Π° этой Π±Π΅Π·ΠΎΠ±ΠΈΠ΄Π½ΠΎΠΉ Ρ„Ρ€Π°Π·ΠΎΠΉ скрываСтся
ΠΊΡƒΡ‡Π° нСпонятных Π΄Π΅Ρ‚Π°Π»Π΅ΠΉ!).ΠœΠ΅Ρ‚ΠΎΠ΄ ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½ для использования
нравится:

класс FakeSeq:
    ...
    def calc_item (self, i):
        ...
    def __getitem __ (self, item):
        Ссли isinstance (элСмСнт, срСз):
            индСксы = item.indices (len (self))
            return FakeSeq ([self.calc_item (i) для i Π² Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π΅ (* индСксы)])
        Π΅Ρ‰Π΅:
            Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ self.calc_item (i)
 

Из этого ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° Π²Ρ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²ΠΈΠ΄Π΅Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ встроСнный срСз
ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ являСтся Ρ‚ΠΈΠΏΠΎΠ²Ρ‹ΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ для Ρ‚ΠΈΠΏΠ° срСза ΠΈ большС Π½Π΅ являСтся
функция.Π­Ρ‚ΠΎ соотвСтствуСт Python 2.2, Π³Π΄Π΅ int,
str ΠΈ Ρ‚. Π΄. ΠΏΡ€Π΅Ρ‚Π΅Ρ€ΠΏΠ΅Π»ΠΈ Ρ‚Π°ΠΊΠΎΠ΅ ΠΆΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅.

Π‘ΠΌ. Об этом Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π΅ … для получСния ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎ прСдлоТСниях ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ.

.

Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚ Python ()

ΠžΠ±ΡŠΠ΅ΠΊΡ‚ срСза ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для срСзания Π·Π°Π΄Π°Π½Π½ΠΎΠΉ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ (строки, Π±Π°ΠΉΡ‚ΠΎΠ², ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠ°, списка ΠΈΠ»ΠΈ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π°) ΠΈΠ»ΠΈ любого ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ» ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ (Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ __getitem __ () ΠΈ __len __ () ).

Бинтаксис slice () :

срСз (Π½Π°Ρ‡Π°Π»ΠΎ, остановка, шаг) 

slice () ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹

slice () ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ Ρ‚Ρ€ΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°:

  • start (Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ) — ΠΠ°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ΅ Ρ†Π΅Π»ΠΎΠ΅ число, с ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ начинаСтся Π½Π°Ρ€Π΅Π·ΠΊΠ° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°.По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ НСт , Ссли Π½Π΅ ΡƒΠΊΠ°Π·Π°Π½.
  • stop — Π¦Π΅Π»ΠΎΠ΅ число, Π΄ΠΎ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ выполняСтся Π½Π°Ρ€Π΅Π·ΠΊΠ°. НарСзка останавливаСтся Π½Π° индСксС stop -1 (послСдний элСмСнт) .
  • шаг (Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ) — ЦСлочислСнноС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‰Π΅Π΅ ΠΏΡ€ΠΈΡ€Π°Ρ‰Π΅Π½ΠΈΠ΅ ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΌ индСксом для Π½Π°Ρ€Π΅Π·ΠΊΠΈ. По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ НСт , Ссли Π½Π΅ ΡƒΠΊΠ°Π·Π°Π½.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 1. Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° срСза для Π½Π°Ρ€Π΅Π·ΠΊΠΈ

  # содСрТит индСксы (0, 1, 2)
Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚1 = срСз (3)
ΠΏΠ΅Ρ‡Π°Ρ‚ΡŒ (Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚1)

# содСрТит индСксы (1, 3)
Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚2 = срСз (1, 5, 2)
ΠΏΠ΅Ρ‡Π°Ρ‚ΡŒ (срСз (1, 5, 2))  

Π’Ρ‹Ρ…ΠΎΠ΄

  срСз (НСт, 3, НСт)
Π»ΠΎΠΌΡ‚ΠΈΠΊ (1, 5, 2) 
 

Π—Π΄Π΅ΡΡŒ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚1 ΠΈ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚2 ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ срСза.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΡ‹ Π·Π½Π°Π΅ΠΌ ΠΎΠ± ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°Ρ… срСза, Π΄Π°Π²Π°ΠΉΡ‚Π΅ посмотрим, ΠΊΠ°ΠΊ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ подстроку, подсписок, ΠΏΠΎΠ΄ΠΊΠΎΡ€Ρ‚Π΅ΠΆ ΠΈ Ρ‚.Π΄. ΠΈΠ· ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² срСза.


ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 2: ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ подстроку с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° срСза

  # ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° для получСния подстроки ΠΈΠ· Π·Π°Π΄Π°Π½Π½ΠΎΠΉ строки

py_string = 'Python'

# stop = 3
# содСрТит индСксы 0, 1 ΠΈ 2
slice_object = кусок (3)
print (py_string [slice_object]) # Pyt

# start = 1, stop = 6, step = 2
# содСрТит индСксы 1, 3 ΠΈ 5
slice_object = срСз (1, 6, 2)
print (py_string [slice_object]) # yhn  

Π’Ρ‹Ρ…ΠΎΠ΄

  Pyt
yhn 
 

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 3: ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ подстроку с ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ индСксом

  py_string = 'Python'

# start = -1, stop = -4, step = -1
# содСрТит индСксы -1, -2 ΠΈ -3
slice_object = срСз (-1, -4, -1)

print (py_string [slice_object]) # noh  

Π’Ρ‹Ρ…ΠΎΠ΄

  н.э. 
 

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 4: ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ подсписок ΠΈ ΠΏΠΎΠ΄ΠΊΠΎΡ€Ρ‚Π΅ΠΆ

  py_list = ['P', 'y', 't', 'h', 'o', 'n']
py_tuple = ('P', 'y', 't', 'h', 'o', 'n')

# содСрТит индСксы 0, 1 ΠΈ 2
slice_object = кусок (3)
print (py_list [slice_object]) # ['P', 'y', 't']

# содСрТит индСксы 1 ΠΈ 3
slice_object = срСз (1, 5, 2)
print (py_tuple [slice_object]) # ('y', 'h')  

Π’Ρ‹Ρ…ΠΎΠ΄

  ['P', 'y', 't']
('y', 'h') 
 

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 5: ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ подсписок ΠΈ ΠΏΠΎΠ΄ΠΊΠΎΡ€Ρ‚Π΅ΠΆ с ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ индСксом

  py_list = ['P', 'y', 't', 'h', 'o', 'n']
py_tuple = ('P', 'y', 't', 'h', 'o', 'n')

# содСрТит индСксы -1, -2 ΠΈ -3
slice_object = срСз (-1, -4, -1)
print (py_list [slice_object]) # ['n', 'o', 'h']

# содСрТит индСксы -1 ΠΈ -3
slice_object = срСз (-1, -5, -2)
print (py_tuple [slice_object]) # ('n', 'h')  

Π’Ρ‹Ρ…ΠΎΠ΄

  ['n', 'o', 'h']
('ΠΏ', 'Ρ‡') 
 

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 6: ИспользованиС синтаксиса индСксирования для Π½Π°Ρ€Π΅Π·ΠΊΠΈ

ΠžΠ±ΡŠΠ΅ΠΊΡ‚ срСза ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ синтаксисом индСксирования Π² Python.

Π’Ρ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ синтаксис для Π½Π°Ρ€Π΅Π·ΠΊΠΈ:

obj [Π½Π°Ρ‡Π°Π»ΠΎ: стоп: шаг] 

НапримСр,

  py_string = 'Python'

# содСрТит индСксы 0, 1 ΠΈ 2
print (py_string [0: 3]) # Pyt

# содСрТит индСксы 1 ΠΈ 3
print (py_string [1: 5: 2]) # yh  

Π’Ρ‹Ρ…ΠΎΠ΄

  Pyt
yh 
 

.

Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ

Π’Π°Ρˆ адрСс email Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½. ΠžΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ поля ΠΏΠΎΠΌΠ΅Ρ‡Π΅Π½Ρ‹ *