ΠšΠΎΡ€Ρ‚Π΅ΠΆ Π² ΠΏΠΈΡ‚ΠΎΠ½Π΅ – ΠšΠΎΡ€Ρ‚Π΅ΠΆΠΈ. Π£Ρ€ΠΎΠΊ 20 курса «Python. Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅»

ΠšΠΎΡ€Ρ‚Π΅ΠΆΠΈ. Π£Ρ€ΠΎΠΊ 20 курса «Python. Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅»

ΠšΠΎΡ€Ρ‚Π΅ΠΆΠΈ (tuple) Π² Python – это Ρ‚Π΅ ΠΆΠ΅ списки Π·Π° ΠΎΠ΄Π½ΠΈΠΌ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ. ΠšΠΎΡ€Ρ‚Π΅ΠΆΠΈ нСизмСняСмыС структуры Π΄Π°Π½Π½Ρ‹Ρ…. Π’Π°ΠΊ ΠΆΠ΅ ΠΊΠ°ΠΊ списки ΠΎΠ½ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ ΡΠΎΡΡ‚ΠΎΡΡ‚ΡŒ ΠΈΠ· элСмСнтов Ρ€Π°Π·Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ², пСрСчислСнных Ρ‡Π΅Ρ€Π΅Π· Π·Π°ΠΏΡΡ‚ΡƒΡŽ. ΠšΠΎΡ€Ρ‚Π΅ΠΆΠΈ Π·Π°ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‚ΡΡ Π² ΠΊΡ€ΡƒΠ³Π»Ρ‹Π΅, Π° Π½Π΅ ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π½Ρ‹Π΅.

>>> a = (10, 2.13, "square", 89, 'C')
>>> a
(10, 2.13, 'square', 89, 'C')

Из ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠ° ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ·Π²Π»Π΅ΠΊΠ°Ρ‚ΡŒ элСмСнты ΠΈ Π±Ρ€Π°Ρ‚ΡŒ срСзы:

>>> a[3]
89
>>> a[1:3]
(2.13, 'square')

Однако ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ Π΅Π³ΠΎ элСмСнты нСльзя:

>>> a[0] = 11
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'tuple' object does not support item assignment

Π’Π°ΠΊΠΆΠ΅ Ρƒ Ρ‚ΠΈΠΏΠ° tuple Π½Π΅Ρ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² для добавлСния ΠΈ удалСния элСмСнтов.

Π’ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ Ρ€Π΅Π·ΠΎΠ½Π½Ρ‹ΠΉ вопрос. Π—Π°Ρ‡Π΅ΠΌ Π² язык программирования Π±Ρ‹Π» Π²Π²Π΅Π΄Π΅Π½ этот Ρ‚ΠΈΠΏ Π΄Π°Π½Π½Ρ‹Ρ…, ΠΏΠΎ-сути ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΠΈΠΉ собой нСизмСняСмый список? Π”Π΅Π»ΠΎ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΈΠ½ΠΎΠ³Π΄Π° Π½Π°Π΄ΠΎ Π·Π°Ρ‰ΠΈΡ‚ΠΈΡ‚ΡŒ список ΠΎΡ‚ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ. ΠŸΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Ρ‚ΡŒ ΠΆΠ΅ ΠΊΠΎΡ€Ρ‚Π΅ΠΆ Π² список, Ссли это потрСбуСтся, ΠΊΠ°ΠΊ ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΎΠ±Ρ€Π°Ρ‚Π½ΡƒΡŽ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ Π»Π΅Π³ΠΊΠΎ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ встроСнных Π² Python Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ list() ΠΈ tuple():

>>> a = (10, 2.13, "square", 89, 'C')
>>> b = [1, 2, 3]
>>> c = list(a)
>>> d = tuple(b)
>>> c
[10, 2.13, 'square', 89, 'C']
>>> d
(1, 2, 3)

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

def addNum(seq, num):
    for i in range(len(seq)):
        seq[i] += num
    return seq
Β 
origin = [3, 6, 2, 6]
changed = addNum(origin, 3)
Β 
print(origin)
print(changed)

Данная ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Π°Ρ. Π₯отя Π½ΠΈΠΊΠ°ΠΊΠΈΡ… выбросов ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ Π½Π΅ ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΠ΄Π΅Ρ‚, ΠΎΠ½Π° содСрТит Π»ΠΎΠ³ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ ΠΎΡˆΠΈΠ±ΠΊΡƒ. На Π²Ρ‹Π²ΠΎΠ΄Π΅ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ:

[6, 9, 5, 9]
[6, 9, 5, 9]

Π’ΠΎ Π΅ΡΡ‚ΡŒ исходный список Π±Ρ‹Π» Ρ‚Π°ΠΊΠΆΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½. ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ seq содСрТал ссылку Π½Π΅ Π½Π° свой Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ список, Π° Π½Π° список-ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π». Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Π² ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π΅ return здСсь Π½Π΅Ρ‚ смыла. Если функция Π·Π°ΠΌΡ‹ΡΠ»ΠΈΠ²Π°Π»Π°ΡΡŒ ΠΊΠ°ΠΊ ΠΈΠ·ΠΌΠ΅Π½ΡΡŽΡ‰Π°Ρ Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹ΠΉ список, Ρ‚ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π΄ΠΎΠ»ΠΆΠ½Π° Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ Ρ‚Π°ΠΊ:

def addNum(seq, num):
    for i in range(len(seq)):
        seq[i] += num
Β 
origin = [3, 6, 2, 6]
addNum(origin, 3)
print(origin)

Π§Ρ‚ΠΎ Π΄Π΅Π»Π°Ρ‚ΡŒ, Ссли всС ΠΆΠ΅ трСбуСтся Π½Π΅ ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ исходный список, Π° ΡΡ„ΠΎΡ€ΠΌΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎ Π½Π΅ΠΌΡƒ Π½ΠΎΠ²Ρ‹ΠΉ. Π—Π°Π΄Π°Ρ‡Ρƒ ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π΅ΡˆΠΈΡ‚ΡŒ нСсколькими способами. Π’ΠΎ ΠΏΠ΅Ρ€Π²Ρ‹Ρ…, Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ список, послС Ρ‡Π΅Π³ΠΎ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒ Π΅Π³ΠΎ:

def addNum(seq, num):
    new_seq = []
    for i in seq:
        new_seq.append(i + num)
    return new_seq
Β 
origin = [3, 6, 2, 6]
changed = addNum(origin, 3)
Β 
print(origin)
print(changed)

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚:

[3, 6, 2, 6]
[6, 9, 5, 9]

Π˜ΡΡ…ΠΎΠ΄Π½Ρ‹ΠΉ список Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π½Π΅ мСняСтся. Π•Π³ΠΎ элСмСнты лишь ΠΏΠ΅Ρ€Π΅Π±ΠΈΡ€Π°ΡŽΡ‚ΡΡ.

Π’Ρ‚ΠΎΡ€ΠΎΠΉ способ Π·Π°Ρ‰ΠΈΡ‚ΠΈΡ‚ΡŒ список-ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π» – ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΡ€Ρ‚Π΅ΠΆ. Π­Ρ‚ΠΎΡ‚ способ Π±ΠΎΠ»Π΅Π΅ Π½Π°Π΄Π΅ΠΆΠ½Ρ‹ΠΉ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Π² Π±ΠΎΠ»ΡŒΡˆΠΈΡ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°Ρ… Ρ‚Ρ€ΡƒΠ΄Π½ΠΎ ΠΎΡ‚ΡΠ»Π΅Π΄ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π½ΠΈ ΠΎΠ΄Π½Π° функция Π½Π΅ содСрТит ΠΊΠΎΠΌΠ°Π½Π΄ измСнСния Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ….

Π₯отя ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒ ΠΊ ΠΊΠΎΡ€Ρ‚Π΅ΠΆΡƒ ΠΌΠΎΠΆΠ½ΠΎ ΠΊΠ°ΠΊ ΠΏΡ€ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π΅ Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, Ρ‚Π°ΠΊ ΠΈ Π² самой Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π»ΡƒΡ‡ΡˆΠ΅ сразу Π΄Π΅Π»Π°Ρ‚ΡŒ Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹ΠΉ список ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠ΅ΠΌ. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ нСизмСняСмыС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΠΏΠ΅Ρ€Π΅Π΄Π°ΡŽΡ‚ΡΡ ΠΏΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ, Π° Π½Π΅ ΠΏΠΎ ссылкС, Ρ‚ΠΎ Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΡΡ‚ΡƒΠΏΠ°Ρ‚ΡŒ копия структуры, Π° Π½Π΅ ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π». Π”Π°ΠΆΠ΅ Ссли Ρ‚ΡƒΠ΄Π° пСрСдаСтся ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π», ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π΅Π³ΠΎ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ. МоТно лишь, ΠΊΠ°ΠΊ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚, ΡΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ ΠΈ/ΠΈΠ»ΠΈ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Ρ‚ΠΈΠΏ, создав Ρ‚Π΅ΠΌ самым Π»ΠΎΠΊΠ°Π»ΡŒΠ½ΡƒΡŽ структуру, ΠΈ Π΄Π΅Π»Π°Ρ‚ΡŒ с Π½Π΅ΠΉ всС, Ρ‡Ρ‚ΠΎ заблагорассудится.

def addNum(seq, num):
    seq = list(seq)
    for i in range(len(seq)):
        seq[i] += num
    return seq
Β 
origin = (3, 6, 2, 6)
changed = addNum(origin, 3)
Β 
print(origin)
print(changed)

Бписки Π² ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠ°Ρ…

ΠšΠΎΡ€Ρ‚Π΅ΠΆΠΈ ΠΌΠΎΠ³ΡƒΡ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ списки, Ρ‚Π°ΠΊΠΆΠ΅ ΠΊΠ°ΠΊ списки Π±Ρ‹Ρ‚ΡŒ Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹ΠΌΠΈ Π² Π΄Ρ€ΡƒΠ³ΠΈΠ΅ списки.

>>> nested = (1, "do", ["param", 10, 20])

Как Π²Ρ‹ Π΄ΡƒΠΌΠ°Π΅Ρ‚Π΅, ΠΌΠΎΠΆΠ΅ΠΌ Π»ΠΈ ΠΌΡ‹ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ список [«param», 10, 20] Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹ΠΉ Π² ΠΊΠΎΡ€Ρ‚Π΅ΠΆ nested? Бписок измСняСм, ΠΊΠΎΡ€Ρ‚Π΅ΠΆ – Π½Π΅Ρ‚. Если Π²Π°ΠΌ каТСтся, Ρ‡Ρ‚ΠΎ нСльзя, Ρ‚ΠΎ Π²Π°ΠΌ каТСтся Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ. На самом Π΄Π΅Π»Π΅ ΠΌΠΎΠΆΠ½ΠΎ:

>>> nested[2][1] = 15
>>> nested
(1, 'do', ['param', 15, 20])

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅. ВыраТСния Ρ‚ΠΈΠΏΠ° nested[2][1] ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ для обращСния ΠΊ Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹ΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌ. ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ индСкс ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° ΠΏΠΎΠ·ΠΈΡ†ΠΈΡŽ Π²Π»ΠΎΠΆΠ΅Π½Π½ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, Π²Ρ‚ΠΎΡ€ΠΎΠΉ – индСкс элСмСнта Π²Π½ΡƒΡ‚Ρ€ΠΈ Π²Π»ΠΎΠΆΠ΅Π½Π½ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°. Π’Π°ΠΊ Π² Π΄Π°Π½Π½ΠΎΠΌ случаС сам список Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠ° ΠΈΠΌΠ΅Π΅Ρ‚ индСкс 2, Π° элСмСнт списка 10 – индСкс 1 Π² спискС.

Бтранная ситуация. ΠšΠΎΡ€Ρ‚Π΅ΠΆ нСизмСняСм, Π½ΠΎ ΠΌΡ‹ всС-Ρ‚Π°ΠΊΠΈ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π΅Π³ΠΎ. На самом Π΄Π΅Π»Π΅ ΠΊΠΎΡ€Ρ‚Π΅ΠΆ остаСтся нСизмСняСмым. ΠŸΡ€ΠΎΡΡ‚ΠΎ Π² Π½Π΅ΠΌ содСрТится Π½Π΅ сам список, Π° ссылка Π½Π° Π½Π΅Π³ΠΎ. Π•Π΅ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ нСльзя. Но ΠΌΠ΅Π½ΡΡ‚ΡŒ сам список ΠΌΠΎΠΆΠ½ΠΎ.

Π§Ρ‚ΠΎΠ±Ρ‹ Π±Ρ‹Π»ΠΎ ΠΏΡ€ΠΎΡ‰Π΅ ΠΏΠΎΠ½ΡΡ‚ΡŒ, ΠΏΠ΅Ρ€Π΅ΠΏΠΈΡˆΠ΅ΠΌ ΠΊΠΎΡ€Ρ‚Π΅ΠΆ Ρ‚Π°ΠΊ:

>>> l = ["param", 10, 20]
>>> t = (1, "do", l)
>>> t
(1, 'do', ['param', 10, 20])

ΠšΠΎΡ€Ρ‚Π΅ΠΆ содСрТит ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ-ссылку. ΠŸΠΎΠΌΠ΅Π½ΡΡ‚ΡŒ Π΅Π΅ Π½Π° Π΄Ρ€ΡƒΠ³ΡƒΡŽ ссылку нСльзя. Но ΠΊΠΎΡ€Ρ‚Π΅ΠΆ Π½Π΅ содСрТит самого списка. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΌΠ΅Π½ΡΡ‚ΡŒ ΠΊΠ°ΠΊ ΡƒΠ³ΠΎΠ΄Π½ΠΎ:

>>> l.pop(0)
'param'
>>> t
(1, 'do', [10, 20])

Однако ΠΏΠΎΠΌΠ½ΠΈΡ‚Π΅, Ρ‚Π°ΠΊΠΎΠΉ Π½ΠΎΠΌΠ΅Ρ€ Π½Π΅ ΠΏΡ€ΠΎΠΊΠ°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ с нСизмСняСмыми Ρ‚ΠΈΠΏΠ°ΠΌΠΈ:

>>> a = "Kat"
>>> t = (a, l)
>>> t
('Kat', [10, 20])
>>> a = "Bat"
>>> t
('Kat', [10, 20])

Они ΠΏΠ΅Ρ€Π΅Π΄Π°ΡŽΡ‚ΡΡ Π² ΠΊΠΎΡ€Ρ‚Π΅ΠΆ ΠΊΠ°ΠΊ ΠΈ Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ – ΠΏΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ. Π’. Π΅. ΠΈΡ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ копируСтся Π² ΠΌΠΎΠΌΠ΅Π½Ρ‚ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ.

ΠŸΡ€Π°ΠΊΡ‚ΠΈΡ‡Π΅ΡΠΊΠ°Ρ Ρ€Π°Π±ΠΎΡ‚Π°

  1. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ измСнСния исходного списка, Π½Π΅ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΡ€Ρ‚Π΅ΠΆ. МоТно ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π΅Π³ΠΎ копию с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° списка copy() ΠΈΠ»ΠΈ Π²Π·ΡΡ‚ΡŒ срСз ΠΎΡ‚ Π½Π°Ρ‡Π°Π»Π° Π΄ΠΎ ΠΊΠΎΠ½Ρ†Π° [:]. Π‘ΠΊΠΎΠΏΠΈΡ€ΡƒΠΉΡ‚Π΅ список ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ ΠΈ Π²Ρ‚ΠΎΡ€Ρ‹ΠΌ способом ΠΈ ΡƒΠ±Π΅Π΄ΠΈΡ‚Π΅ΡΡŒ, Ρ‡Ρ‚ΠΎ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠΏΠΈΠΉ Π½ΠΈΠΊΠ°ΠΊ Π½Π΅ отраТаСтся Π½Π° ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»Π΅.

  2. Π—Π°ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅ ΠΎΠ΄ΠΈΠ½ ΠΊΠΎΡ€Ρ‚Π΅ΠΆ Π΄Π΅ΡΡΡ‚ΡŒΡŽ случайными Ρ†Π΅Π»Ρ‹ΠΌΠΈ числами ΠΎΡ‚ 0 Π΄ΠΎ 5 Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ. Π’Π°ΠΊΠΆΠ΅ Π·Π°ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅ Π²Ρ‚ΠΎΡ€ΠΎΠΉ ΠΊΠΎΡ€Ρ‚Π΅ΠΆ числами ΠΎΡ‚ -5 Π΄ΠΎ 0. Для заполнСния ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠ΅ΠΉ числами Π½Π°ΠΏΠΈΡˆΠΈΡ‚Π΅ ΠΎΠ΄Π½Ρƒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ. ΠžΠ±ΡŠΠ΅Π΄ΠΈΠ½ΠΈΡ‚Π΅ Π΄Π²Π° ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠ° с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° +, создав Ρ‚Π΅ΠΌ самым Ρ‚Ρ€Π΅Ρ‚ΠΈΠΉ ΠΊΠΎΡ€Ρ‚Π΅ΠΆ. Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠ° count() ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚Π΅ Π² Π½Π΅ΠΌ количСство Π½ΡƒΠ»Π΅ΠΉ. Π’Ρ‹Π²Π΅Π΄ΠΈΡ‚Π΅ Π½Π° экран Ρ‚Ρ€Π΅Ρ‚ΠΈΠΉ ΠΊΠΎΡ€Ρ‚Π΅ΠΆ ΠΈ количСство Π½ΡƒΠ»Π΅ΠΉ Π² Π½Π΅ΠΌ.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Π² android-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ ΠΈ pdf-вСрсии курса.

younglinux.info

ΠžΡΠ½ΠΎΠ²Ρ‹ Python β€” ΠΊΡ€Π°Ρ‚ΠΊΠΎ. Π§Π°ΡΡ‚ΡŒ 3. Бписки, ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠΈ, Ρ„Π°ΠΉΠ»Ρ‹. / Habr

Π’ ΠΎΠ±Ρ‰Π΅ΠΌ-Ρ‚ΠΎ послСдняя ΠΈΠ· Π³ΠΎΡ‚ΠΎΠ²Ρ‹Ρ… Π³Π»Π°Π². ΠžΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅ Π±ΡƒΠ΄ΡƒΡ‚ Π²Ρ‹Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒ Ρ‡ΡƒΡ‚ΡŒ Ρ€Π΅ΠΆΠ΅, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π΅Ρ‰Π΅ Π½Π΅ написаны (Π½ΠΎ я ΡƒΠ²Π΅Ρ€Π΅Π½ Ρ‡Ρ‚ΠΎ Π±ΡƒΠ΄ΡƒΡ‚, хотя это зависит Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΡ‚ Π²Π°ΡˆΠΈΡ… ΠΏΠΎΠΆΠ΅Π»Π°Π½ΠΈΠΉ, ΡƒΠ²Π°ΠΆΠ°Π΅ΠΌΡ‹Π΅ Ρ‡ΠΈΡ‚Π°Ρ‚Π΅Π»ΠΈ πŸ™‚

Π’Π°ΠΊΠΆΠ΅ слСдуСт Π·Π°ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ Ρ‡Ρ‚ΠΎ это это, Π²ΠΈΠ΄ΠΈΠΌΠΎ, послСдний «простой ΡƒΡ€ΠΎΠΊΒ», дальшС я ΠΏΠΎΡΡ‚Π°Ρ€Π°ΡŽΡΡŒ ΡƒΠ³Π»ΡƒΠ±ΠΈΡ‚ΡŒΡΡ Π²ΠΎ всС аспСкты программирования, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΡ‹ ΠΏΡ€ΠΎΡˆΠ»ΠΈ Β«ΠΏΠΎ Π²Π΅Ρ€Ρ…Π°ΠΌΒ» ΠΈ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΡ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ Π΄Π΅Ρ‚Π°Π»ΡŒΠ½ΠΎ.

Π’ ΠΎΠ±Ρ‰Π΅ΠΌ, Ρ‚Π΅ ΠΊΠΎΠΌΡƒ Π½Π΅ интСрСсно β€” Ρ‡ΠΈΡ‚Π°ΡŽΡ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ Π½ΠΎΠ²ΠΎΡΡ‚ΡŒ, Π° ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Ρ… β€” ΠΏΡ€ΠΎΡˆΡƒ ΠΏΡ€ΠΎΠΉΡ‚ΠΈ .

Python для Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰ΠΈΡ…. Π“Π»Π°Π²Π° Ρ‚Ρ€Π΅Ρ‚ΡŒΡ. Β«List, tuple, etc.Β»

ΠšΠΎΡ€Ρ‚Π΅ΠΆΠΈ.
ΠšΠΎΡ€Ρ‚Π΅ΠΆΠΈ (Π°Π½Π³Π». tuple) ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для прСдставлСния нСизмСняСмой ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Ρ€Π°Π·Π½ΠΎΡ€ΠΎΠ΄Π½Ρ‹Ρ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ². Они ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π·Π°ΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚ΡΡ Π² ΠΊΡ€ΡƒΠ³Π»Ρ‹Ρ… скобках, Π½ΠΎ Ссли нСоднозначности Π½Π΅ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚, Ρ‚ΠΎ скобки ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ.

>>> t = (2, 2.05, "Hello")
>>> t
(2, 2.0499999999999998, 'Hello')
>>> (a, b, c) = t
>>> print a, b, c
2 2.05 Hello
>>> z, y, x = t
>>> print z, y, x
2 2.05 Hello
>>> a=1
>>> b=2
>>> a,b=b,a
>>> print a,b
2 1
>>> x = 12,
>>> x
(12,)

Как Π²ΠΈΠ΄Π½ΠΎ ΠΈΠ· ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°, ΠΊΠΎΡ€Ρ‚Π΅ΠΆ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ использован ΠΈ Π² Π»Π΅Π²ΠΎΠΉ части ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° присваивания. ЗначСния ΠΈΠ· ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠ° Π² Π»Π΅Π²ΠΎΠΉ части ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° присваивания ΡΠ²ΡΠ·Ρ‹Π²Π°ΡŽΡ‚ΡΡ с Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½Ρ‹ΠΌΠΈ элСмСнтами ΠΏΡ€Π°Π²ΠΎΠΉ части. Π­Ρ‚ΠΎΡ‚ Ρ„Π°ΠΊΡ‚ ΠΊΠ°ΠΊ Ρ€Π°Π· ΠΈ Π΄Π°Π΅Ρ‚ Π½Π°ΠΌ Ρ‚Π°ΠΊΠΈΠ΅ Π·Π°ΠΌΠ΅Ρ‡Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ возмоТности ΠΊΠ°ΠΊ массовая инициализация ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‚ мноТСства Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΈΠ· Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ. ПослСдний ΠΏΡ€ΠΈΠΌΠ΅Ρ€ дСмонстрируСт созданиС ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠ° ΠΈΠ· ΠΎΠ΄Π½ΠΎΠ³ΠΎ элмСнта (Π΅Π³ΠΎ часто Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ синглтоном).

Бписки

Π’ ΠŸΠ°ΠΉΡ‚ΠΎΠ½Π΅ ΠΎΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‚ массивы Π² Ρ‚Ρ€Π°Π΄ΠΈΡ†ΠΈΠΎΠ½Π½ΠΎΠΌ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠΈ этого Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°. ВмСсто Π½ΠΈΡ… для хранСния ΠΎΠ΄Π½ΠΎΡ€ΠΎΠ΄Π½Ρ‹Ρ… (ΠΈ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ) ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ списки. Они Π·Π°Π΄Π°ΡŽΡ‚ΡΡ трСмя способами.

ΠŸΡ€ΠΎΡΡ‚ΠΎΠ΅ пСрСчислСниС:

>>> a = [2, 2.25, "Python"]
>>> a
[2, 2.25, 'Python']

ΠŸΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ΅ΠΌ строку Π² список
>>> b = list("help")
>>> b
['h', 'e', 'l', 'p']

Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ списковых Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ. Π’ Π΄Π°Π½Π½ΠΎΠΌ случаС ΠΌΡ‹ Π±Π΅Ρ€Π΅ΠΌ ΠΊΡƒΠ±Ρ‹ всСх Π½Π΅Ρ‡Π΅Ρ‚Π½Ρ‹Ρ… чисСл ΠΎΡ‚ 0 Π΄ΠΎ 19. Π­Ρ‚ΠΎΠΌΡƒ синтаксису я ΠΏΠ»Π°Π½ΠΈΡ€ΡƒΡŽ ΠΏΠΎΡΠ²ΡΡ‚ΠΈΡ‚ΡŒ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠ΅ занятиС.
>>> c = [x ** 3 for x in range(20) if x%2==1]
>>> c
[1, 27, 125, 343, 729, 1331, 2197, 3375, 4913, 6859]

Для Ρ€Π°Π±ΠΎΡ‚Ρ‹ со списками ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ ряд ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ² ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ:
len(s) Π”Π»ΠΈΠ½Π° ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ s
x in s ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° принадлСТности элСмСнта ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ. Π’ Π½ΠΎΠ²Ρ‹Ρ… вСрсиях Python ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡ‚ΡŒ ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ½ΠΎΡΡ‚ΡŒ подстроки строкС. Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ True ΠΈΠ»ΠΈ False
x not in s = not x in s
s + s1 ΠšΠΎΠ½ΠΊΠ°Ρ‚Π΅Π½Π°Ρ†ΠΈΡ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚Π΅ΠΉ
s*n ΠΈΠ»ΠΈ n*s ΠŸΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΈΠ· n Ρ€Π°Π· ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π΅Π½Π½ΠΎΠΉ s. Если n
s[i] Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ i-ΠΉ элСмСнт s ΠΈΠ»ΠΈ len(s)+i-ΠΉ, Ссли i
s[i:j:d] Π‘Ρ€Π΅Π· ΠΈΠ· ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ s ΠΎΡ‚ i Π΄ΠΎ j с шагом d Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒΡΡ Π½ΠΈΠΆΠ΅
min(s) НаимСньший элСмСнт s
max(s) Наибольший элСмСнт s
s[i] = x i-ΠΉ элСмСнт списка s замСняСтся Π½Π° x
s[i:j:d] = t Π‘Ρ€Π΅Π· ΠΎΡ‚ i Π΄ΠΎ j (с шагом d) замСняСтся Π½Π° (список) t
del s[i:j:d] Π£Π΄Π°Π»Π΅Π½ΠΈΠ΅ элСмСнтов срСза ΠΈΠ· ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ

ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, для списков ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ ряд ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ².
append(x) ДобавляСт элСмСнт Π² ΠΊΠΎΠ½Π΅Ρ† ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ
count(x) Π‘Ρ‡ΠΈΡ‚Π°Π΅Ρ‚ количСство элСмСнтов, Ρ€Π°Π²Π½Ρ‹Ρ… x
extend(s) ДобавляСт ΠΊ ΠΊΠΎΠ½Ρ†Ρƒ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ s
index(x) Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ наимСньшСС i, Ρ‚Π°ΠΊΠΎΠ΅, Ρ‡Ρ‚ΠΎ s[i] == x. Π’ΠΎΠ·Π±ΡƒΠΆΠ΄Π°Π΅Ρ‚ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ValueError, Ссли x Π½Π΅ Π½Π°ΠΉΠ΄Π΅Π½ Π² s
insert(i, x) ВставляСт элСмСнт x Π² i-ΠΉ ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΠΊ
pop(i) Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ i-ΠΉ элСмСнт, удаляя Π΅Π³ΠΎ ΠΈΠ· ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ
reverse() ΠœΠ΅Π½ΡΠ΅Ρ‚ порядок элСмСнтов s Π½Π° ΠΎΠ±Ρ€Π°Ρ‚Π½Ρ‹ΠΉ
sort([cmpfunc]) Π‘ΠΎΡ€Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚ элСмСнты s. ΠœΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΡƒΠΊΠ°Π·Π°Π½Π° своя функция сравнСния cmpfunc

Для прСобразования ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠ° Π² список Π΅ΡΡ‚ΡŒ функция list, для ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ β€” tuple.

Об индСксировании списков ΠΈ Π²Ρ‹Π΄Π΅Π»Π΅Π½ΠΈΠΈ ΠΏΠΎΠ΄ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚Π΅ΠΉ слСдуСт Π΅Ρ‰Π΅ Ρ€Π°Π· ΡƒΠΏΠΎΠΌΡΠ½ΡƒΡ‚ΡŒ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎ (этот ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎ ΠΈ для строк). Для получСния элСмСнта ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π½Ρ‹Π΅ скобки, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… находится индСкс элСмСнта. Π­Π»Π΅ΠΌΠ΅Π½Ρ‚Ρ‹ Π½ΡƒΠΌΠ΅Ρ€ΡƒΡŽΡ‚ΡΡ с нуля. ΠžΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ индСкса ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° элСмСнты с ΠΊΠΎΠ½Ρ†Π°. ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ с ΠΊΠΎΠ½Ρ†Π° списка (строки) элСмСнт ΠΈΠΌΠ΅Π΅Ρ‚ индСкс -1.

>>> s = [0, 1, 2, 3, 4]
>>> print s[0], s[-1], s[3]
0 4 3
>>> s[2] = -2
>>> print s
[0, 1, -2, 3, 4]
>>> del s[2]
>>> print s
[0, 1, 3, 4]

Π‘Π»ΠΎΠΆΠ½Π΅Π΅ обстоят Π΄Π΅Π»Π° со срСзами. Для получСния срСзов ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Π² ΠŸΠ°ΠΉΡ‚ΠΎΠ½Π΅ принято ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ Π½Π΅ Π½ΠΎΠΌΠ΅Ρ€Π° элСмСнтов, Π° Π½ΠΎΠΌΠ΅Ρ€Π° Β«ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΊΠΎΠ²Β» ΠΌΠ΅ΠΆΠ΄Ρƒ Π½ΠΈΠΌΠΈ. ΠŸΠ΅Ρ€Π΅Π΄ ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ элСмСнтом ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΠΊ ΠΈΠΌΠ΅Π΅Ρ‚ индСкс 0, ΠΏΠ΅Ρ€Π΅Π΄ Π²Ρ‚ΠΎΡ€Ρ‹ΠΌ – 1 ΠΈ Ρ‚Π°ΠΊ Π΄Π°Π»Π΅Π΅. ΠžΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ значСния ΠΎΡ‚ΡΡ‡ΠΈΡ‚Ρ‹Π²Π°ΡŽΡ‚ элСмСнты с ΠΊΠΎΠ½Ρ†Π° строки.
Π’ ΠΎΠ±Ρ‰Π΅ΠΌ Π²ΠΈΠ΄Π΅ срСз записываСтся Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ Π²ΠΈΠ΄Π΅:
список[Π½Π°Ρ‡Π°Π»ΠΎ: ΠΊΠΎΠ½Π΅Ρ†: шаг]
По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Π½Π°Ρ‡Π°Π»ΠΎ срСза Ρ€Π°Π²Π½ΠΎ 0, ΠΊΠΎΠ½Π΅Ρ† срСза Ρ€Π°Π²Π΅Π½ len(список), шаг Ρ€Π°Π²Π΅Π½ 1. Если шаг Π½Π΅ указываСтся, Π²Ρ‚ΠΎΡ€ΠΎΠΉ символ Β«:Β» ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ.
Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ срСза ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ подмноТСство для вставки списка Π² Π΄Ρ€ΡƒΠ³ΠΎΠΉ список, Π΄Π°ΠΆΠ΅ ΠΏΡ€ΠΈ Π½ΡƒΠ»Π΅Π²ΠΎΠΉ Π΄Π»ΠΈΠ½Π΅. Π­Ρ‚ΠΎ ΡƒΠ΄ΠΎΠ±Π½ΠΎ для вставки списка Π² строго ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ.
>>> l = range(12)
>>> l
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]
>>> l[1:3]
[1, 2]
>>> l[-1:]
[11]
>>> l[::2]
[0, 2, 4, 6, 8, 10]
>>> l[0:1]=[-1,-1,-1]
>>> l
[-1, -1, -1, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]
>>> del l[:3]
>>> l
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]

Π‘Π»ΠΎΠ²Π°Ρ€ΠΈ

Π‘Π»ΠΎΠ²Π°Ρ€ΡŒ (Ρ…ΡΡˆ, ΠΏΡ€Π΅Π΄ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΉ массив) – измСняСмая структура Π΄Π°Π½Π½Ρ‹Ρ…, прСдназначСнная для хранСния элСмСнтов Π²ΠΈΠ΄Π° ΠΊΠ»ΡŽΡ‡: Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅. ВсС Π»Π΅Π³ΠΊΠΎ показываСтся Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅.

Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ Ρ…Π΅ΡˆΠΈ.

>>> h2 = {1:"one", 2:"two", 3:"three"}
>>> h3 = {0:"zero", 5:"five"}
>>> h4 = {"z":1, "y":2, "x":3}
#Π¦ΠΈΠΊΠ» ΠΏΠΎ ΠΏΠ°Ρ€Π΅ ΠΊΠ»ΡŽΡ‡-Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅
>>> for key, value in h2.items():
...     print key, " ", value
...
1   one
2   two
3   three

#Π¦ΠΈΠΊΠ» ΠΏΠΎ ΠΊΠ»ΡŽΡ‡Π°ΠΌ
>>> for key in h3.keys():
...     print key, " ", h3[key]
...
0   zero
5   five

#Π¦ΠΈΠΊΠ» ΠΏΠΎ значСниям
>>> for v in h4.values():
...     print v
...
2
3
1

#Π”ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ элСмСнтов ΠΈΠ· Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ Ρ…Π΅ΡˆΠ°
>>> h2.update(h4)

#ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ ΠΏΠ°Ρ€ Π² Ρ…Π΅ΡˆΠ΅
>>> len(h2)
6

Π’ΠΈΠΏ file

ΠžΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ этого Ρ‚ΠΈΠΏΠ° ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Ρ‹ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с внСшними Π΄Π°Π½Π½Ρ‹ΠΌΠΈ. Π§Π°Ρ‰Π΅ всСго Π΄Π°Π½Π½ΠΎΠΌΡƒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ соотвСтствуСт Ρ„Π°ΠΉΠ» Π½Π° дискС, Π½ΠΎ это Π΄Π°Π»Π΅ΠΊΠΎ Π½Π΅ всСгда Ρ‚Π°ΠΊ. Π€Π°ΠΉΠ»ΠΎΠ²Ρ‹Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒ основныС ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹: read(), write(), readline(), readlines(), seek(), tell(), close() ΠΈ Ρ‚.ΠΏ.

Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Ρ„Π°ΠΉΠ»Π°:

f1 = open("file1.txt", "r")
f2 = open("file2.txt", "w")
for line in f1.readlines():
  f2.write(line)
f2.close()
f1.close()

(этот ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ массой Π΄Ρ€ΡƒΠ³ΠΈΡ… способов, ΠΌΠ½ΠΎΠ³ΠΈΠ΅ ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… сильно ΠΎΡ‚Π»ΠΈΡ‡Π°ΡŽΡ‚ΡΡ ΠΏΠΎ ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ, Π½ΠΎ это Ρ‚ΠΎΠΆΠ΅ Ρ‚Π΅ΠΌΠ° ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ Ρ€Π°Π·Π³ΠΎΠ²ΠΎΡ€Π°)

Π’ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ΅, Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Ρƒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½ΠΎ Π±Π΅Π·Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΎ, ΠΏΠ΅Ρ€Π΅Π΄Π°Π½ ΠΈΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Ρ‚ΠΈΠΏΠ° Ρ„Π°ΠΉΠ», ΠΈΠ»ΠΈ любой Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ с Ρ‚Π°ΠΊΠΈΠΌΠΈ ΠΆΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌΠΈ. Π’Π°ΠΊ, ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹ΠΉ Π²Ρ‹ΡˆΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡ‡Π΅Π½ΡŒ Π»Π΅Π³ΠΊΠΎ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ для скачивания Ρ„Π°ΠΉΠ»Π° ΠΈΠ· Π˜Π½Ρ‚Π΅Ρ€Π½Π΅, Π·Π°ΠΌΠ΅Π½ΠΈΠ² Π² Π½Π΅ΠΌ ΠΏΠ΅Ρ€Π²ΡƒΡŽ строку Π½Π° ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ΄.

import urllib
f1 = urllib.urlopen("http://python.onego.ru") 

Π—Π°Π΄Π°Ρ‡ΠΈ:
β€” Π Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ «массовой Π·Π°ΠΊΠ°Ρ‡ΠΊΠΈΒ» URL-ΠΎΠ² ΠΈΠ· Ρ„Π°ΠΉΠ»Π° urls.txt
β€” Π Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, ΡΠΊΠ°Ρ‡ΠΈΠ²Π°ΡŽΡ‰ΡƒΡŽ страницу ΠΏΠΎ ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠΌΡƒ URL со всСм Π΅Π΅ содСрТимым.
β€” ΠΠ°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, которая ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ² Π½Π° Π²Ρ…ΠΎΠ΄Π΅ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½Ρ‹ΠΉ список ΡƒΠ΄Π°Π»ΠΈΡ‚ ΠΈΠ· Π½Π΅Π³ΠΎ всС ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΡΡŽΡ‰ΠΈΠ΅ΡΡ элСмСнты.

habr.com

Π˜ΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½Ρ‹Π΅ ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠΈ. ПишСм ΠΊΠΎΠ΄ Π½Π° Python Ρ‡ΠΈΡ‰Π΅ / Habr

Π’ стандартной Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ΅ ΠΏΠΈΡ‚ΠΎΠ½Π° содСрТится спСциализированный Ρ‚ΠΈΠΏ «namedtuple», ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ, каТСтся, Π½Π΅ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ Ρ‚ΠΎΠ³ΠΎ внимания, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΎΠ½ заслуТиваСт. Π­Ρ‚ΠΎ ΠΎΠ΄Π½Π° ΠΈΠ· прСкрасных Ρ„ΠΈΡ‡ Π² ΠΏΠΈΡ‚ΠΎΠ½Π΅, которая скрыта с ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ взгляда.

Π˜ΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½Ρ‹Π΅ ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΡ‚Π»ΠΈΡ‡Π½ΠΎΠΉ Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²ΠΎΠΉ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΡŽ классов ΠΈ ΠΎΠ½ΠΈ ΠΈΠΌΠ΅ΡŽΡ‚ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ интСрСсныС особСнности, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ я Ρ…ΠΎΡ‡Ρƒ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ Π²Π°ΠΌ Π² этой ΡΡ‚Π°Ρ‚ΡŒΠ΅.

Π’Π°ΠΊ Ρ‡Ρ‚ΠΎ ΠΆΠ΅ Ρ‚Π°ΠΊΠΎΠ΅ ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ ΠΊΠΎΡ€Ρ‚Π΅ΠΆ ΠΈ Ρ‡Ρ‚ΠΎ Π΄Π΅Π»Π°Π΅Ρ‚ Π΅Π³ΠΎ Ρ‚Π°ΠΊΠΈΠΌ спСциализированным? Π₯ΠΎΡ€ΠΎΡˆΠΈΠΉ способ ΠΏΠΎΡ€Π°Π·ΠΌΡ‹ΡˆΠ»ΡΡ‚ΡŒ Π½Π°Π΄ этим β€” Ρ€Π°ΡΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½Ρ‹Π΅ ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠΈ ΠΊΠ°ΠΊ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ Π½Π°Π΄ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΌΠΈ ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠ°ΠΌΠΈ.

ΠšΠΎΡ€Ρ‚Π΅ΠΆΠΈ Π² ΠΏΠΈΡ‚ΠΎΠ½Π΅ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ собой ΠΏΡ€ΠΎΡΡ‚ΡƒΡŽ структуру Π΄Π°Π½Π½Ρ‹Ρ… для Π³Ρ€ΡƒΠΏΠΏΠΈΡ€ΠΎΠ²ΠΊΠΈ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½Ρ‹Ρ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ². ΠšΠΎΡ€Ρ‚Π΅ΠΆΠΈ ΡΠ²Π»ΡΡŽΡ‚ΡΡ нСизмСняСмыми β€” ΠΎΠ½ΠΈ Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½Ρ‹ послС ΠΈΡ… создания.

>>> tup = ('hello', object(), 42)
>>> tup
('hello', <object object at 0x105e76b70>, 42)
>>> tup[2]
42
>>> tup[2] = 23
TypeError: "'tuple' object does not support item assignment"

ΠžΠ±Ρ€Π°Ρ‚Π½Π°Ρ сторона ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠ΅ΠΉ β€” это Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ ΠΈΠ· Π½ΠΈΡ… ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ числовыС индСксы. Π’Ρ‹ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π°Ρ‚ΡŒ ΠΈΠΌΠ΅Π½Π° ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΌ элСмСнтам сохранённым Π² ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠ΅. Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠ²Π»ΠΈΡΡ‚ΡŒ Π½Π° Ρ‡ΠΈΡ‚Π°Π΅ΠΌΠΎΡΡ‚ΡŒ ΠΊΠΎΠ΄Π°.

Π’Π°ΠΊΠΆΠ΅, ΠΊΠΎΡ€Ρ‚Π΅ΠΆ всСгда являСтся узкоспСциализированной структурой. ВяТСло ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π±Ρ‹ Π΄Π²Π° ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠ° ΠΈΠΌΠ΅Π»ΠΈ ΠΎΠ΄Π½ΠΈ ΠΈ Ρ‚Π΅ ΠΆΠ΅ Π½ΠΎΠΌΠ΅Ρ€Π° ΠΏΠΎΠ»Π΅ΠΉ ΠΈ ΠΎΠ΄Π½ΠΈ ΠΈ Ρ‚Π΅ ΠΆΠ΅ свойства сохранённыС Π² Π½ΠΈΡ…. Π­Ρ‚ΠΎ Π΄Π΅Π»Π°Π΅Ρ‚ ΠΈΡ… Π»Ρ‘Π³ΠΊΠΈΠΌΠΈ для знакомства со β€œslip-of-the-mind” Π±Π°Π³Π°ΠΌΠΈ, Π³Π΄Π΅ Π»Π΅Π³ΠΊΠΎ ΠΏΠ΅Ρ€Π΅ΠΏΡƒΡ‚Π°Ρ‚ΡŒ порядок ΠΏΠΎΠ»Π΅ΠΉ.


ЦСль ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½Ρ‹Ρ… ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠ΅ΠΉ β€” Ρ€Π΅ΡˆΠΈΡ‚ΡŒ эти Π΄Π²Π΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹.

ΠŸΡ€Π΅ΠΆΠ΄Π΅ всСго, ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½Ρ‹Π΅ ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠΈ ΡΠ²Π»ΡΡŽΡ‚ΡΡ нСизмСняСмыми ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΌ ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠ°ΠΌ. Π’Ρ‹ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ ΠΈΡ… послС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Π²Ρ‹ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ помСстили Π² Π½ΠΈΡ….

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

Π’ΠΎΡ‚ ΠΊΠ°ΠΊ выглядит ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ ΠΊΠΎΡ€Ρ‚Π΅ΠΆ:

>>> from collections import namedtuple
>>> Car = namedtuple('Car' , 'color mileage')

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ ΠΊΠΎΡ€Ρ‚Π΅ΠΆ, Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ collections. Π˜ΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½Ρ‹Π΅ ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠΈ Π±Ρ‹Π»ΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Ρ‹ Π² ΡΡ‚Π°Π½Π΄Π°Ρ€Ρ‚Π½ΡƒΡŽ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ Π² Python 2.6. Π’ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π²Ρ‹ΡˆΠ΅ ΠΌΡ‹ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠ»ΠΈ простой Ρ‚ΠΈΠΏ Π΄Π°Π½Π½Ρ‹Ρ… «Car» с двумя полями: «color» ΠΈ «mileage».

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π½Π°ΠΉΡ‚ΠΈ синтакс Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ странным здСсь. ΠŸΠΎΡ‡Π΅ΠΌΡƒ ΠΌΡ‹ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‘ΠΌ поля ΠΊΠ°ΠΊ строку Π·Π°ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½Π½ΡƒΡŽ с «color mileage»?

ΠžΡ‚Π²Π΅Ρ‚ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ функция Ρ„Π°Π±Ρ€ΠΈΠΊΠΈ ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½Ρ‹Ρ… ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠ΅ΠΉ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ split() Π½Π° строки с ΠΈΠΌΠ΅Π½Π°ΠΌΠΈ ΠΏΠΎΠ»Π΅ΠΉ. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, это, Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ, просто сокращСниС, Ρ‡Ρ‚ΠΎ Π±Ρ‹ ΡΠΊΠ°Π·Π°Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅:

>>> 'color mileage'.split()
['color', 'mileage']
>>> Car = namedtuple('Car', ['color', 'mileage'])

ΠšΠΎΠ½Π΅Ρ‡Π½ΠΎ, Π²Ρ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ список со строками ΠΈΠΌΡ‘Π½ ΠΏΠΎΠ»Π΅ΠΉ Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ, Ссли Π²Ρ‹ ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡ΠΈΡ‚Π°Π΅Ρ‚Π΅ Ρ‚Π°ΠΊΠΎΠΉ ΡΡ‚ΠΈΠ»ΡŒ. ΠŸΡ€Π΅ΠΈΠΌΡƒΡ‰Π΅ΡΡ‚Π²ΠΎ использования списка Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π² этом случаС Π»Π΅Π³ΠΊΠΎ ΠΏΠ΅Ρ€Π΅Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ этот ΠΊΠΎΠ΄, Ссли Π²Π°ΠΌ понадобится Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚ΡŒ Π΅Π³ΠΎ Π½Π° нСсколько Π»ΠΈΠ½ΠΈΠΉ:

>>> Car = namedtuple('Car', [
...     'color',
...     'mileage',
... ])

Как Π±Ρ‹ Π²Ρ‹ Π½ΠΈ Ρ€Π΅ΡˆΠΈΠ»ΠΈ, сСйчас Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π½ΠΎΠ²Ρ‹Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ «car» Ρ‡Π΅Ρ€Π΅Π· Ρ„Π°Π±Ρ€ΠΈΡ‡Π½ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ Car. ПовСдСниС Π±ΡƒΠ΄Π΅Ρ‚ Ρ‚Π°ΠΊΠΎΠ΅ ΠΆΠ΅, ΠΊΠ°ΠΊ Ссли Π±Ρ‹ Π²Ρ‹ Ρ€Π΅ΡˆΠΈΠ»ΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ класс Car Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ ΠΈ Π΄Π°Ρ‚ΡŒ Π΅ΠΌΡƒ конструктор ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°ΡŽΡ‰ΠΈΠΉ значСния «color» ΠΈ «mileage»:

>>> my_car = Car('red', 3812.4)
>>> my_car.color
'red'
>>> my_car.mileage
3812.4

Распаковка ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠ΅ΠΉ ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ ‘*’ для распаковки Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Ρ‚Π°ΠΊΠΆΠ΅ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ ΠΊΠ°ΠΊ оТидаСтся:

>>> color, mileage = my_car
>>> print(color, mileage)
red 3812.4
>>> print(*my_car)
red 3812.4

НСсмотря Π½Π° доступ ΠΊ значСниям сохранённым Π² ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½ΠΎΠΌ ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠ΅ Ρ‡Π΅Ρ€Π΅Π· ΠΈΡ… ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€, Π²Ρ‹ всё Π΅Ρ‰Ρ‘ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΎΠ±Ρ€Π°Ρ‰Π°Ρ‚ΡŒΡΡ ΠΊ Π½ΠΈΠΌ Ρ‡Π΅Ρ€Π΅Π· ΠΈΡ… индСкс. Π­Ρ‚ΠΎ свойство ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½Ρ‹Ρ… ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠ΅ΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ использовано для ΠΈΡ… распаковки Π² ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΉ ΠΊΠΎΡ€Ρ‚Π΅ΠΆ:

>>> my_car[0]
'red'
>>> tuple(my_car)
('red', 3812.4)

Π’Ρ‹ Π΄Π°ΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ красивоС строковоС ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² бСсплатно, Ρ‡Ρ‚ΠΎ сэкономит Π²Π°ΠΌ врСмя ΠΈ спасёт ΠΎΡ‚ избыточности:

>>> my_car
Car(color='red' , mileage=3812.4)

Π˜ΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½Ρ‹Π΅ ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠΈ, ΠΊΠ°ΠΊ ΠΈ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Π΅ ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠΈ, ΡΠ²Π»ΡΡŽΡ‚ΡΡ нСизмСняСмыми. Когда Π²Ρ‹ ΠΏΠΎΠΏΡ‹Ρ‚Π°Π΅Ρ‚Π΅ΡΡŒ ΠΏΠ΅Ρ€Π΅Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΎΠ΄Π½ΠΎ ΠΈΠ· ΠΈΡ… ΠΏΠΎΠ»Π΅ΠΉ, Π²Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ AttributeError:

>>> my_car.color = 'blue'
AttributeError: "can't set attribute"

ΠžΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½Ρ‹Ρ… ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠ΅ΠΉ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅ Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‚ΡΡ Π² ΠΏΠΈΡ‚ΠΎΠ½Π΅ ΠΊΠ°ΠΊ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Π΅ классы. Когда Π΄Π΅Π»ΠΎ Π΄ΠΎΡ…ΠΎΠ΄ΠΈΡ‚ Π΄ΠΎ использованию памяти, Ρ‚ΠΎ ΠΎΠ½ΠΈ Ρ‚Π°ΠΊ ΠΆΠ΅ «Π»ΡƒΡ‡ΡˆΠ΅», Ρ‡Π΅ΠΌ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Π΅ классы ΠΈ просто Ρ‚Π°ΠΊ ΠΆΠ΅ эффСктивны Π² использовании памяти ΠΊΠ°ΠΊ ΠΈ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Π΅ ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠΈ.

Π₯ΠΎΡ€ΠΎΡˆΠΈΠΉ ΠΏΡƒΡ‚ΡŒ ΡΡƒΠ΄ΠΈΡ‚ΡŒ ΠΎ Π½ΠΈΡ… β€” ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½Ρ‹Π΅ ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠΈ ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΊΡ€Π°Ρ‚ΠΊΠΎΠΉ Ρ„ΠΎΡ€ΠΌΠΎΠΉ для создания Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ эффСктивно Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰Π΅Π³ΠΎ с ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ нСизмСняСмого класса.


ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½Ρ‹Π΅ ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠΈ построСны Π½Π° ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Ρ… классах, Ρ‚ΠΎ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ Π² класс, унаслСдованный ΠΎΡ‚ ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠ°.

>>> Car = namedtuple('Car', 'color mileage')
>>> class MyCarWithMethods(Car):
...     def hexcolor(self):
...         if self.color == 'red':
...            return '#ff0000'
...         else:
...             return '#000000'

БСйчас ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ MyCarWithMethods ΠΈ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ ΠΈΡ… ΠΌΠ΅Ρ‚ΠΎΠ΄ hexcolor() Ρ‚Π°ΠΊ, ΠΊΠ°ΠΊ оТидалось:

>>> c = MyCarWithMethods('red', 1234)
>>> c.hexcolor()
'#ff0000'

НСсмотря Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ это ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ Π½Π΅ΡƒΠΊΠ»ΡŽΠΆΠ΅, такая рСализация ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ стоящим Π΄Π΅Π»ΠΎΠΌ Ссли Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ класс с нСизмСняСмыми свойствами. Но Π²Ρ‹ Π»Π΅Π³ΠΊΠΎ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΡ€ΠΎΡΡ‚Ρ€Π΅Π»ΠΈΡ‚ΡŒ сСбС Π½ΠΎΠ³Ρƒ Π² Ρ‚Π°ΠΊΠΎΠΌ случаС.

НапримСр, Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ Π½ΠΎΠ²ΠΎΠ³ΠΎ нСизмСняСмого поля являСтся ΠΊΠ°Π²Π΅Ρ€Π·Π½ΠΎΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠ΅ΠΉ ΠΈΠ·-Π·Π° Ρ‚ΠΎΠ³ΠΎ ΠΊΠ°ΠΊ ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½Ρ‹Π΅ ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠΈ устроСны Π²Π½ΡƒΡ‚Ρ€ΠΈ. Π‘ΠΎΠ»Π΅Π΅ простой ΠΏΡƒΡ‚ΡŒ создания ΠΈΠ΅Ρ€Π°Ρ€Ρ…ΠΈΠΈ ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½Ρ‹Ρ… ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠ΅ΠΉ β€” использованиС свойства ._fields Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠ°:

>>> Car = namedtuple('Car', 'color mileage')
>>> ElectricCar = namedtuple(
...     'ElectricCar', Car._fields + ('charge',))

Π­Ρ‚ΠΎ Π΄Π°Ρ‘Ρ‚ ΠΆΠ΅Π»Π°Π΅ΠΌΡ‹ΠΉ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚:

>>> ElectricCar('red', 1234, 45.0)
ElectricCar(color='red', mileage=1234, charge=45.0)

ΠšΡ€ΠΎΠΌΠ΅ свойства _fields ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ экзСмпляр ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠ° Ρ‚Π°ΠΊΠΆΠ΅ прСдоставляСт Π΅Ρ‰Ρ‘ нСсколько Π²ΡΠΏΠΎΠΌΠΎΠ³Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π½Π°ΠΉΡ‚ΠΈ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ΠΌΠΈ. ВсС ΠΈΡ… ΠΈΠΌΠ΅Π½Π° Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‚ΡΡ со Π·Π½Π°ΠΊΠ° подчёркивания, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ Π½Π°ΠΌ, Ρ‡Ρ‚ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΈΠ»ΠΈ свойство «ΠΏΡ€ΠΈΠ²Π°Ρ‚Π½ΠΎΠ΅» ΠΈ Π½Π΅ являСтся Ρ‡Π°ΡΡ‚ΡŒΡŽ ΡƒΡΡ‚ΠΎΡΠ²ΡˆΠ΅Π³ΠΎΡΡ интСрфСйса класса ΠΈΠ»ΠΈ модуля.

Π§Ρ‚ΠΎ касаСтся ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½Ρ‹Ρ… ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠ΅ΠΉ, Ρ‚ΠΎ соглашСниС ΠΎΠ± ΠΈΠΌΠ΅Π½Π°Ρ… Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰ΠΈΡ…ΡΡ со Π·Π½Π°ΠΊΠ° подчёркивания здСсь ΠΈΠΌΠ΅Π΅Ρ‚ Π΄Ρ€ΡƒΠ³ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅: эти Π²ΡΠΏΠΎΠΌΠΎΠ³Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΈ свойства ΡΠ²Π»ΡΡŽΡ‚ΡΡ Ρ‡Π°ΡΡ‚ΡŒΡŽ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΎΠ³ΠΎ интСрфСйса ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½Ρ‹Ρ… ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠ΅ΠΉ. Π‘ΠΈΠΌΠ²ΠΎΠ» подчёркивания Π² этих ΠΈΠΌΠ΅Π½Π°Ρ… Π±Ρ‹Π» использован для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ ΠΊΠΎΠ»Π»ΠΈΠ·ΠΈΠΉ ΠΈΠΌΡ‘Π½ с полями ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠ°, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½Ρ‹ΠΌΠΈ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ. Π’Π°ΠΊ Ρ‡Ρ‚ΠΎ, Π½Π΅ ΡΡ‚Π΅ΡΠ½ΡΠΉΡ‚Π΅ΡΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΡ…, Ссли ΠΎΠ½ΠΈ Π²Π°ΠΌ понадобятся!

Π― Ρ…ΠΎΡ‡Ρƒ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ Π²Π°ΠΌ нСсколько сцСнариСв Π³Π΄Π΅ Π²ΡΠΏΠΎΠΌΠΎΠ³Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠ° ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΡ€ΠΈΠ³ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ. Π”Π°Π²Π°ΠΉΡ‚Π΅ Π½Π°Ρ‡Π½Ρ‘ΠΌ с ΠΌΠ΅Ρ‚ΠΎΠ΄Π° _asdict(). Он Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ содСрТимоС ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠ° Π² Π²ΠΈΠ΄Π΅ словаря:

>>> my_car._asdict()
OrderedDict([('color', 'red'), ('mileage', 3812.4)])

Π­Ρ‚ΠΎ ΠΎΡ‡Π΅Π½ΡŒ Π·Π΄ΠΎΡ€ΠΎΠ²ΠΎ для избСгания ΠΎΠΏΠ΅Ρ‡Π°Ρ‚ΠΎΠΊ ΠΏΡ€ΠΈ создании JSON, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

>>> json.dumps(my_car._asdict())
'{"color": "red", "mileage": 3812.4}'

Π”Ρ€ΡƒΠ³ΠΎΠΉ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ΠΉ ΠΏΠΎΠΌΠΎΡ‰Π½ΠΈΠΊ β€” функция _replace(). Она создаёт ΠΏΠΎΠ²Π΅Ρ€Ρ…Π½ΠΎΡΡ‚Π½ΡƒΡŽ(shallow) копию ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠ° ΠΈ Ρ€Π°Π·Ρ€Π΅ΡˆΠ°Π΅Ρ‚ Π²Π°ΠΌ Π²Ρ‹Π±ΠΎΡ€ΠΎΡ‡Π½ΠΎ Π·Π°ΠΌΠ΅Π½ΡΡ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ поля:

>>> my_car._replace(color='blue')
Car(color='blue', mileage=3812.4)

И, Π½Π°ΠΊΠΎΠ½Π΅Ρ†, ΠΌΠ΅Ρ‚ΠΎΠ΄ класса _make() ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ использован Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π½ΠΎΠ²Ρ‹ΠΉ экзСмпляр ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠ° ΠΈΠ· ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ:

>>> Car._make(['red', 999])
Car(color='red', mileage=999)

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

Π― Π½Π°Ρ…ΠΎΠΆΡƒ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ρ‡Ρ‚ΠΎ ΠΏΡƒΡ‚ΡŒ ΠΎΡ‚ узкоспСциализированных структур Π΄Π°Π½Π½Ρ‹Ρ… с Тёстко Π·Π°Π΄Π°Π½Π½Ρ‹ΠΌ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΎΠΌ, Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ словари ΠΊ ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½Ρ‹ΠΌ ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠ°ΠΌ ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ ΠΌΠ½Π΅ Π²Ρ‹Ρ€Π°ΠΆΠ°Ρ‚ΡŒ ΠΌΠΎΠΈ намСрСния Π±ΠΎΠ»Π΅Π΅ чисто. Часто ΠΊΠΎΠ³Π΄Π° я ΠΏΡ‹Ρ‚Π°ΡŽΡΡŒ это Ρ€Π΅Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΡ‚ΡŒ, Ρ‚ΠΎ я магичСски Π΄ΠΎΡΡ‚ΠΈΠ³Π°ΡŽ Π»ΡƒΡ‡ΡˆΠΈΡ… Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΉ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ, с ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ я ΡΡ‚Π°Π»ΠΊΠΈΠ²Π°ΡŽΡΡŒ.

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

Π‘ Π΄Ρ€ΡƒΠ³ΠΎΠΉ стороны, я ΡΡ‚Π°Ρ€Π°ΡŽΡΡŒ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½Ρ‹Π΅ ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠΈ Ρ€Π°Π΄ΠΈ ΠΈΡ… ΠΏΠΎΠ»ΡŒΠ·Ρ‹, Ссли ΠΎΠ½ΠΈ Π½Π΅ ΠΏΠΎΠΌΠΎΠ³Π°ΡŽΡ‚ ΠΌΠ½Π΅ ΠΏΠΈΡΠ°Ρ‚ΡŒ Ρ‡ΠΈΡ‰Π΅, Ρ‡ΠΈΡ‚Π°Π±Π΅Π»ΡŒΠ½Π΅Π΅ ΠΈ Π½Π΅ Π΄Π΅Π»Π°ΡŽΡ‚ ΠΊΠΎΠ΄ Π±ΠΎΠ»Π΅Π΅ Π»Ρ‘Π³ΠΊΠΈΠΌ Π² сопровоТдСнии. Блишком ΠΌΠ½ΠΎΠ³ΠΎ Ρ…ΠΎΡ€ΠΎΡˆΠΈΡ… Π²Π΅Ρ‰Π΅ΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ ΠΏΠ»ΠΎΡ…ΠΎΠΉ Π²Π΅Ρ‰ΡŒΡŽ.

Однако, Ссли Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ ΠΈΡ… с ΠΎΡΡ‚ΠΎΡ€ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒΡŽ, Ρ‚ΠΎ ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½Ρ‹Π΅ ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠΈ, Π±Π΅Π· сомнСния, ΠΌΠΎΠ³ΡƒΡ‚ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ваш ΠΊΠΎΠ΄ Π½Π° Python Π»ΡƒΡ‡ΡˆΠ΅ ΠΈ Π±ΠΎΠ»Π΅Π΅ Π²Ρ‹Ρ€Π°Π·ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ.



  • collections.namedtuple β€” краткая Ρ„ΠΎΡ€ΠΌΠ° для создания Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ эффСктивно Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰Π΅Π³ΠΎ с ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ нСизмСняСмого класса.
  • Π˜ΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½Ρ‹Π΅ ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠΈ ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠΎΠΌΠΎΡ‡ΡŒ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ваш ΠΊΠΎΠ΄ Ρ‡ΠΈΡ‰Π΅, обСспСчивая вас Π±ΠΎΠ»Π΅Π΅ простыми Π² ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠΈ структурами Π΄Π°Π½Π½Ρ‹Ρ….
  • Π˜ΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½Ρ‹Π΅ ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠΈ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‚ нСсколько ΠΏΠΎΠ»Π΅Π·Π½Ρ‹Ρ… Π²ΡΠΏΠΎΠΌΠΎΠ³Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‚ΡΡ с символа подчёркивания (_), Π½ΠΎ ΡΠ²Π»ΡΡŽΡ‚ΡΡ Ρ‡Π°ΡΡ‚ΡŒΡŽ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΎΠ³ΠΎ интСрфСйса. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΡ… β€” это Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½Π°Ρ ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ°.

habr.com

Π£ΠΏΠ°ΠΊΠΎΠ²ΠΊΠ° Π΄Π°Π½Π½Ρ‹Ρ… Π² Python β€” ΠΊΠΎΡ€Ρ‚Π΅ΠΆ tuple

ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²ΡŒΡ‚Π΅ сСбя Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ. Π”Π°, это Π½Π΅ просто, ΠΈ всС ΠΆΠ΅…

Вас Π·ΠΎΠ²ΡƒΡ‚ get_contacts ΠΈ Π²Ρ‹ ΡƒΠΌΠ΅Π΅Ρ‚Π΅ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΊΠΎΠ½Ρ‚Π°ΠΊΡ‚Ρ‹ Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊΠ° ΠΏΠΎ email-адрСсу: Π΅Π³ΠΎ адрСс, имя ΠΈ Π½ΠΎΠΌΠ΅Ρ€ Ρ‚Π΅Π»Π΅Ρ„ΠΎΠ½Π°. Π’Ρ‹ Π½Π΅ ΠΏΡ€ΠΎΡ‡ΡŒ ΠΏΠΎΠ΄Π΅Π»ΠΈΡ‚ΡŒΡΡ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠ΅ΠΉ с Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ, Π½ΠΎ Python Π²Π°ΠΌ это Π·Π°ΠΏΡ€Π΅Ρ‰Π°Π΅Ρ‚. НСльзя Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒ Ρ‚Π°ΠΊ ΠΌΠ½ΠΎΠ³ΠΎ Π΄Π°Π½Π½Ρ‹Ρ… Ρ€Π°Π·ΠΎΠΌ, Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Ρƒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ ΠΎΠ΄Π½ΠΎ, самоС Π²Π°ΠΆΠ½ΠΎΠ΅: адрСс, имя, ΠΈΠ»ΠΈ Ρ‚Π΅Π»Π΅Ρ„ΠΎΠ½ Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊΠ°. Или ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΡ€ΠΎΡΠ²ΠΈΡ‚ΡŒ ΠΈΠ·ΠΎΠ±Ρ€Π΅Ρ‚Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΈ ΡƒΠΏΠ°ΠΊΠΎΠ²Π°Ρ‚ΡŒ всС свои Π΄Π°Π½Π½Ρ‹Π΅ Π² ΠΎΠ΄Π½Ρƒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ.

Как ΡƒΠΏΠ°ΠΊΠΎΠ²Π°Ρ‚ΡŒ

Для Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ get_contacts(email) доступны нСсколько способов ΡƒΠΏΠ°ΠΊΠΎΠ²ΠΊΠΈ Π΄Π°Π½Π½Ρ‹Ρ… Π² Π±ΠΎΠ»Π΅Π΅ ΡΠ»ΠΎΠΆΠ½ΡƒΡŽ структуру: ΡΠ»ΠΎΠ²Π°Ρ€ΡŒ dict(), ΠΊΠΎΡ€Ρ‚Π΅ΠΆ tuple() ΠΈ Π΅Ρ‰Π΅ нСсколько Π΄Ρ€ΡƒΠ³ΠΈΡ…. Рассмотрим ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ послСдний Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ β€” tuple.

ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Π²Ρ‹ Π²Ρ‹Π·Π²Π°Π»ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ get_contacts('[email protected]'), ΠΎΠ½Π° нашла Ρ‚Π°ΠΊΠΎΠ³ΠΎ Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊΠ° ΠΈ Ρ…ΠΎΡ‡Π΅Ρ‚ Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ Π΅Π³ΠΎ ΠΊΠΎΠ½Ρ‚Π°ΠΊΡ‚Ρ‹:

full_name = 'Никифоров Π”ΠΌΠΈΡ‚Ρ€ΠΈΠΉ ΠΠ½Π°Ρ‚ΠΎΠ»ΡŒΠ΅Π²ΠΈΡ‡'
city = 'Москва'
phone_number = '929-876-54-32'

Ѐункция создаСт ΠΊΠΎΡ€Ρ‚Π΅ΠΆ β€” tuple() β€”, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ Π² Π½Π΅Π³ΠΎ всС ΠΊΠΎΠ½Ρ‚Π°ΠΊΡ‚Ρ‹:

contacts = (full_name, city, phone_number)

ΠšΡ€ΡƒΠ³Π»Ρ‹Π΅ скобки ΠΈ запятыС ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ Python, Ρ‡Ρ‚ΠΎ ΠΈΠ· пСрСчислСнных ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… full_name, city ΠΈ phone_number Π½ΡƒΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π½ΠΎΠ²ΡƒΡŽ структуру Π΄Π°Π½Π½Ρ‹Ρ…:

print(type(contacts))  # Π²Ρ‹Π²Π΅Π΄Π΅Ρ‚ <class 'tuple'>
print(contacts)

ПослСдний Π²Ρ‹Π·ΠΎΠ² print() Π²Ρ‹Π²Π΅Π΄Π΅Ρ‚ Π½Π° экран Ρ‚Π°ΠΊΠΎΠ΅:

('Никифоров Π”ΠΌΠΈΡ‚Ρ€ΠΈΠΉ ΠΠ½Π°Ρ‚ΠΎΠ»ΡŒΠ΅Π²ΠΈΡ‡', 'Москва', '929-876-54-32')

Π’Π΅ΠΏΠ΅Ρ€ΡŒ функция get_contacts смоТСт Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ любоС количСство Π΄Π°Π½Π½Ρ‹Ρ…. ВсС ΠΎΠ½ΠΈ Π±ΡƒΠ΄ΡƒΡ‚ ΡƒΠΏΠ°ΠΊΠΎΠ²Π°Π½Ρ‹ Π² ΠΎΠ΄ΠΈΠ½ ΠΊΠΎΡ€Ρ‚Π΅ΠΆ β€” tuple.

Π§Ρ‚ΠΎ Π΄Π΅Π»Π°Ρ‚ΡŒ, Ссли ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΈ tuple

Π Π°Π·Π±Π΅Ρ€Π΅ΠΌ ΠΊΠ°ΠΊ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с tuple Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ стандартной Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ divmod. Она Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ дСлСния с остатком:

divmod(100, 3)  # Π²Ρ‹Π²Π΅Π΄Π΅Ρ‚ (33, 1)
divmod(2, 3) # Π²Ρ‹Π²Π΅Π΄Π΅Ρ‚ (0, 2)

Ѐункция divmod Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΊΠΎΡ€Ρ‚Π΅ΠΆ ΠΈΠ· Π΄Π²ΡƒΡ… чисСл β€” Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π° цСлочислСнного дСлСния ΠΈ остаток ΠΎΡ‚ дСлСния.

ΠœΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ:

div_tuple = divmod(100, 3)
print(div_tuple)  # Π²Ρ‹Π²Π΅Π΄Π΅Ρ‚ (33, 1)

Π”ΠΎΠ±Ρ€Π°Ρ‚ΡŒΡΡ Π΄ΠΎ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΈΠ· Π΄Π²ΡƒΡ… чисСл ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎ индСксу:

div_tuple = divmod(100, 3)
print(div_tuple[0])  # Π²Ρ‹Π²Π΅Π΄Π΅Ρ‚ 33
print(div_tuple[1])  # Π²Ρ‹Π²Π΅Π΄Π΅Ρ‚ 1

Π˜Π½Π΄Π΅ΠΊΡΡ‹ Π² ΠΊΠΎΠ΄Π΅ [0] ΠΈ [1] сильно ΠΎΡΠ»ΠΎΠΆΠ½ΡΡŽΡ‚ Ρ‡Ρ‚Π΅Π½ΠΈΠ΅, поэтому ΠΏΠΎΠ»Π΅Π·Π½ΠΎ Π΄Π°Π²Π°Ρ‚ΡŒ говорящиС названия:

div_tuple = divmod(100, 3)
int_division = div_tuple[0]
remainder = div_tuple[1]

print(int_division)  # Π²Ρ‹Π²Π΅Π΄Π΅Ρ‚ 33
print(remainder)  # Π²Ρ‹Π²Π΅Π΄Π΅Ρ‚ 1

Π’Π°ΠΊΠΎΠΉ ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½ рСкомСндуСтся ΠΊ использованию ΠΈ встрСчаСтся Π½Π°ΡΡ‚ΠΎΠ»ΡŒΠΊΠΎ часто, Ρ‡Ρ‚ΠΎ Π² Python Π²Π²Π΅Π»ΠΈ ΡƒΠΏΡ€ΠΎΡ‰Π΅Π½Π½ΡƒΡŽ ΠΊΠΎΡ€ΠΎΡ‚ΠΊΡƒΡŽ запись:

(int_division, remainder) = divmod(100, 3)
print(int_division)  # Π²Ρ‹Π²Π΅Π΄Π΅Ρ‚ 33
print(remainder)  # Π²Ρ‹Π²Π΅Π΄Π΅Ρ‚ 1

Π—Π°ΠΏΠΈΡΡŒ ΠΏΠΎΡ…ΠΎΠΆΠ° Π½Π° созданиС ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠ° — Ρ‚Π΅ ΠΆΠ΅ скобки ΠΈ запятыС, Π½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ это Π² ΠΎΠ±Ρ€Π°Ρ‚Π½ΡƒΡŽ сторону. НазываСтся «Ρ€Π°ΡΠΏΠ°ΠΊΠΎΠ²ΠΊΠΎΠΉ».

Если Π² ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠ΅ большС ΠΎΠ΄Π½ΠΎΠ³ΠΎ элСмСнта, Ρ‚ΠΎ скобки ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ. Python Π»ΡŽΠ±ΠΈΡ‚ чистый ΠΊΠΎΠ΄:

int_division, remainder = divmod(100, 3)
print(int_division)  # Π²Ρ‹Π²Π΅Π΄Π΅Ρ‚ 33
print(remainder)  # Π²Ρ‹Π²Π΅Π΄Π΅Ρ‚ 1

ПослСдняя Ρ„ΠΎΡ€ΠΌΠ° записи распаковки Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ распространСна ΠΈ рСкомСндуСтся ΠΊ использованию.

Π‘ΠΊΠΎΠ±ΠΊΠΈ Π½Π΅ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ ΠΈ ΠΏΡ€ΠΈ создании ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠ°, Π½ΠΎ этот ΠΏΡ€ΠΈΠ΅ΠΌ ΠΌΠΎΠΆΠ΅Ρ‚ ΡƒΡΠ»ΠΎΠΆΠ½ΠΈΡ‚ΡŒ Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π°, Π±ΡƒΠ΄ΡŒΡ‚Π΅ с Π½ΠΈΠΌ остороТны:

contacts = full_name, city, phone_number

Π’ ΠΊΠΎΠ΄Π΅ Π²Π½ΡƒΡ‚Ρ€ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ часто встрСчаСтся Π΅Ρ‰Π΅ Π±ΠΎΠ»Π΅Π΅ короткая запись:

return full_name, city, phone_number

Π’Ρ‹Π·ΠΎΠ² return сообщаСт ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Ρƒ Python, Ρ‡Ρ‚ΠΎ функция Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ свою Ρ€Π°Π±ΠΎΡ‚Ρƒ ΠΈ Ρ…ΠΎΡ‡Π΅Ρ‚ Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚. А всС пСрСчислСнноС справо ΠΎΡ‚ return Π±ΡƒΠ΄Π΅Ρ‚ ΡƒΠΏΠ°ΠΊΠΎΠ²Π°Π½ΠΎ Π² ΠΊΠΎΡ€Ρ‚Π΅ΠΆ β€” tuple.

Бсылки ΠΏΠΎ Ρ‚Π΅ΠΌΠ΅:

devman.org

ΠŸΡ€ΠΎ Python — Π‘ΠΏΡ€Π°Π²ΠΎΡ‡Π½ΠΈΠΊ — tuple (ΠΊΠΎΡ€Ρ‚Π΅ΠΆ)

ΠšΠΎΡ€Ρ‚Π΅ΠΆ β€” нСизмСняСмая ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ с упорядочСнными элСмСнтами.

Π­Π»Π΅ΠΌΠ΅Π½Ρ‚Π°ΠΌΠΈ ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠ΅ΠΉ ΠΌΠΎΠ³ΡƒΡ‚ Π²Ρ‹ΡΡ‚ΡƒΠΏΠ°Ρ‚ΡŒ Π»ΡŽΠ±Ρ‹Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹.
ОбъявлСниС

Π’ ΠΊΠΎΠ΄Π΅ ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½Ρ‹ ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ скобок β€” () β€” Π²Π½ΡƒΡ‚Ρ€ΠΈ скобок Ρ‡Π΅Ρ€Π΅Π· Π·Π°ΠΏΡΡ‚ΡƒΡŽ ΠΏΠ΅Ρ€Π΅Ρ‡ΠΈΡΠ»ΡΡŽΡ‚ΡΡ элСмСнты Π² Π½ΡƒΠΆΠ½ΠΎΠΉ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ. Если ΠΊΠΎΡ€Ρ‚Π΅ΠΆ состоит ΠΈΠ· ΠΎΠ΄Π½ΠΎΠ³ΠΎ элСмСнта ΠΏΡ€ΠΈ объявлСнии трСбуСтся ΠΏΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π·Π°ΠΏΡΡ‚ΡƒΡŽ послС этого элСмСнта.

Π˜ΠΌΠ΅Ρ‘Ρ‚Π΅ Π² Π²Π²ΠΈΠ΄Ρƒ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ Π·Π°ΠΏΡΡ‚ΡƒΡŽ Π² Ρ‚Π°ΠΊΠΈΡ… случаях ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π»Π΅Π³ΠΊΠΎ ΠΏΡ€ΠΎΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΠΏΡ€ΠΈ Ρ‡Ρ‚Π΅Π½ΠΈΠΈ.

    my_empty_tuple = ()

my_tuple = 1, 'some', 3.5 # Ρ‚ΠΎ ΠΆΠ΅, Ρ‡Ρ‚ΠΎ ΠΈ (1, 'some', 3.5)
my_tuple = 'a', # Ρ‚ΠΎ ΠΆΠ΅, Ρ‡Ρ‚ΠΎ ΠΈ ('a',)


ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±ΡŠΡΠ²ΠΈΡ‚ΡŒ ΠΈΡ… ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ конструктора tuple(), Π² качСствС Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΈΠ»ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‰ΠΈΠΉ ΠΈΡ‚Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ (Π²ΠΊΠ»ΡŽΡ‡Π°Ρ Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹). Если Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠΌ ΡƒΠΊΠ°Π·Π°Π½ ΠΊΠΎΡ€Ρ‚Π΅ΠΆ, Ρ‚ΠΎ ΠΎΠ½ ΠΈ Π±ΡƒΠ΄Π΅Ρ‚ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Ρ‘Π½ Π±Π΅Π· ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ.
    tuple() # ()
tuple('abc') # ('a', 'b', 'c')
tuple([1, 2, 3]) # (1, 2, 3)

Π‘Ρ€Π°Π²Π½Π΅Π½ΠΈΠ΅

Π”Π²Π° ΠΊΠ°Ρ€Ρ‚Π΅ΠΆΠ° ΡΡ€Π°Π²Π½ΠΈΠ²Π°ΡŽΡ‚ΡΡ лСксикографичСски: ΡΡ‡ΠΈΡ‚Π°ΡŽΡ‚ΡΡ Ρ€Π°Π²Π½Ρ‹ΠΌΠΈ, Ссли ΠΈΠΌΠ΅ΡŽΡ‚ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΡƒΡŽ Π΄Π»ΠΈΠ½Ρƒ ΠΈ Ρ€Π°Π²Π½Ρ‹ ΠΈΡ… ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ элСмСнты:
    a = (3, 2, 1)
b = (1, 2, 3)
d = (3, 2, 2)
e = (3, 2)
f = (3, 2, 'a')
a > b # True
a > d # False
d > b # True
a > e # True
# Python 3
a > f # TypeError: '>' not supported between instances of 'int' and 'str'
# Python 2
a > f # False

Π”Π΅Ρ‚Π°Π»ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ CPython

ΠŸΡƒΡΡ‚ΠΎΠΉ ΠΊΠΎΡ€Ρ‚Π΅ΠΆ β€” это глобально ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, всС пустыС ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠΈ β€” это ΠΎΠ΄ΠΈΠ½ ΠΈ Ρ‚ΠΎΡ‚ ΠΆΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, Π° Π·Π½Π°Ρ‡ΠΈΡ‚ ΠΈ адрСс Π² памяти Ρƒ Ρ‚Π°ΠΊΠΈΡ… ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠ΅ΠΉ ΠΎΠ΄ΠΈΠ½.
  a = ()
b = ()
a is b # True
id(a) == id(b) # True

ΠŸΡ€ΠΈ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠΈ ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠ° (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ del, ΠΈΠ»ΠΈ сборщика мусора) нСбольшой Π΄Π»ΠΈΠ½Ρ‹ (Π½Π΅ Π±ΠΎΠ»Π΅Π΅ 19 элСмСнтов), ΠΎΠ½ Π½Π΅ удалСтся сразу, Π° пСрСмСщаСтся Π² ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ удалСния. Π­Ρ‚Π° ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ ΠΈΠΌΠ΅Π΅Ρ‚ 20 Π³Ρ€ΡƒΠΏΠΏ, Π² ΠΊΠ°ΠΆΠ΄ΡƒΡŽ ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΏΠΎΠΌΠ΅Ρ‰Π°ΡŽΡ‚ΡΡ ΡƒΠ΄Π°Π»Ρ‘Π½Π½Ρ‹Π΅ ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠΈ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΉ Π΄Π»ΠΈΠ½Ρ‹, ΠΏΡ€ΠΈΡ‡Ρ‘ΠΌ Π² ΠΏΠ΅Ρ€Π²ΠΎΠΉ Π³Ρ€ΡƒΠΏΠΏΠ΅ хранится пустой ΠΊΠΎΡ€Ρ‚Π΅ΠΆ.
    tuple_0 = (1, 2, 3)
print('tuple_0 %s' % id(tuple_0)) # 140332152236648

tuple_1 = (1, 2, 3)
print('tuple_1 %s' % id(tuple_1)) # 140332152236720

del tuple_1
# Π”Π°Π»Π΅Π΅ прСдполагаСтся, Ρ‡Ρ‚ΠΎ сборка мусора ΡƒΠΆΠ΅ ΠΏΡ€ΠΎΡˆΠ»Π°.
# ΠŸΡ€ΠΎΡ‰Π΅ всСго Π½Π°Π±Π»ΡŽΠ΄Π°Ρ‚ΡŒ Π·Π° Ρ€Π°Π±ΠΎΡ‚ΠΎΠΉ ΠΈΠ· ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠ³ΠΎ сСанса
# ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Π°.

tuple_2 = (1, 2, 4)
print('tuple_2 %s' % id(tuple_2)) # 140332152236720

Π‘ΠΈΠ½ΠΎΠ½ΠΈΠΌΡ‹ поиска: ΠΊΠΎΡ€Ρ‚Π΅ΠΆ, ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠΈ, cortege, typle, Ρ‚ΡƒΠΏΠ»

pythonz.net

Python: ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ значСния Π² ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠ΅ — python

Ну, ΠΊΠ°ΠΊ ΡƒΠΆΠ΅ ΠΏΠΎΠΊΠ°Π·Π°Π»ΠΎ Trufa, Π² ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ΅ Π΅ΡΡ‚ΡŒ Π΄Π²Π° способа Π·Π°ΠΌΠ΅Π½Ρ‹ элСмСнта ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠ° Π½Π° Π΄Π°Π½Π½Ρ‹ΠΉ индСкс. Π›ΠΈΠ±ΠΎ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΡ€Ρ‚Π΅ΠΆ Π² список, Π·Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ элСмСнт ΠΈ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ, Π»ΠΈΠ±ΠΎ ΠΏΠΎΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ Π½ΠΎΠ²Ρ‹ΠΉ ΠΊΠΎΡ€Ρ‚Π΅ΠΆ ΠΏΡƒΡ‚Π΅ΠΌ ΠΊΠΎΠ½ΠΊΠ°Ρ‚Π΅Π½Π°Ρ†ΠΈΠΈ.

In [1]: def replace_at_index1(tup, ix, val):
   ...:     lst = list(tup)
   ...:     lst[ix] = val
   ...:     return tuple(lst)
   ...:

In [2]: def replace_at_index2(tup, ix, val):
   ...:     return tup[:ix] + (val,) + tup[ix+1:]
   ...:

Π˜Ρ‚Π°ΠΊ, ΠΊΠ°ΠΊΠΎΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ Π»ΡƒΡ‡ΡˆΠ΅, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ быстрСС?

ΠžΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ΡΡ, Ρ‡Ρ‚ΠΎ для ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΈΡ… ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠ΅ΠΉ (Π½Π° Python 3.3) конкатСнация выполняСтся быстрСС!

In [3]: d = tuple(range(10))

In [4]: %timeit replace_at_index1(d, 5, 99)
1000000 loops, best of 3: 872 ns per loop

In [5]: %timeit replace_at_index2(d, 5, 99)
1000000 loops, best of 3: 642 ns per loop

Однако, Ссли ΠΌΡ‹ посмотрим Π½Π° Π±ΠΎΠ»Π΅Π΅ Π΄Π»ΠΈΠ½Π½Ρ‹Π΅ ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠΈ, ΠΊΠΎΠ½Π²Π΅Ρ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ списка — это способ:

In [6]: k = tuple(range(1000))

In [7]: %timeit replace_at_index1(k, 500, 99)
100000 loops, best of 3: 9.08 Β΅s per loop

In [8]: %timeit replace_at_index2(k, 500, 99)
100000 loops, best of 3: 10.1 Β΅s per loop

Для ΠΎΡ‡Π΅Π½ΡŒ Π΄Π»ΠΈΠ½Π½Ρ‹Ρ… ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠ΅ΠΉ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ списков Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π»ΡƒΡ‡ΡˆΠ΅!

In [9]: m = tuple(range(1000000))

In [10]: %timeit replace_at_index1(m, 500000, 99)
10 loops, best of 3: 26.6 ms per loop

In [11]: %timeit replace_at_index2(m, 500000, 99)
10 loops, best of 3: 35.9 ms per loop

ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° ΠΊΠΎΠ½ΠΊΠ°Ρ‚Π΅Π½Π°Ρ†ΠΈΠΈ зависит ΠΎΡ‚ индСкса, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΌΡ‹ замСняСм элСмСнт. Для ΠΌΠ΅Ρ‚ΠΎΠ΄Π° списка индСкс Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ значСния.

In [12]: %timeit replace_at_index1(m, 900000, 99)
10 loops, best of 3: 26.6 ms per loop

In [13]: %timeit replace_at_index2(m, 900000, 99)
10 loops, best of 3: 49.2 ms per loop

Π˜Ρ‚Π°ΠΊ: Ссли ваш ΠΊΠΎΡ€Ρ‚Π΅ΠΆ ΠΊΠΎΡ€ΠΎΡ‚ΠΎΠΊ, Π½Π°Ρ€Π΅ΠΆΡŒΡ‚Π΅ ΠΈ соСдинитС. Если ΠΎΠ½ Π΄Π»ΠΈΠ½Π½Ρ‹ΠΉ, Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ списка!

qaru.site

ΠŸΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠ° Π² список ΠΈ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ Ru Python

Π’ настоящСС врСмя я Ρ€Π°Π±ΠΎΡ‚Π°ΡŽ Π½Π°Π΄ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€ΠΎΠΌ ΠΊΠ°Ρ€Ρ‚ для ΠΈΠ³Ρ€Ρ‹ Π² pygame, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΊΠ°Ρ€Ρ‚Ρ‹ ΠΏΠ»ΠΈΡ‚ΠΊΠΈ. Π£Ρ€ΠΎΠ²Π΅Π½ΡŒ строится ΠΈΠ· Π±Π»ΠΎΠΊΠΎΠ² Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ структурС (хотя ΠΈ Π½Π°ΠΌΠ½ΠΎΠ³ΠΎ большС):

Π³Π΄Π΅ Β«1Β» – это Π±Π»ΠΎΠΊ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ прСдставляСт собой стСну, Π° Β«0Β» – это Π±Π»ΠΎΠΊ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ являСтся пустым Π²ΠΎΠ·Π΄ΡƒΡ…ΠΎΠΌ.

Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ΄, Π² основном, относится ΠΊ измСнСнию Ρ‚ΠΈΠΏΠ° Π±Π»ΠΎΠΊΠ°:

Но ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ хранится Π² ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠ΅, я Π½Π΅ ΠΌΠΎΠ³Ρƒ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ значСния Ρ€Π°Π·Π½Ρ‹Ρ… Π±Π»ΠΎΠΊΠΎΠ². Как я ΠΌΠΎΠ³Ρƒ Π»Π΅Π³ΠΊΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ значСния Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅?

ΠŸΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΡ€Ρ‚Π΅ΠΆ Π² список:

 >>> t = ('my', 'name', 'is', 'mr', 'tuple') >>> t ('my', 'name', 'is', 'mr', 'tuple') >>> list(t) ['my', 'name', 'is', 'mr', 'tuple'] 

ΠŸΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Ρ‚ΡŒ список Π² ΠΊΠΎΡ€Ρ‚Π΅ΠΆ:

 >>> l = ['my', 'name', 'is', 'mr', 'list'] >>> l ['my', 'name', 'is', 'mr', 'list'] >>> tuple(l) ('my', 'name', 'is', 'mr', 'list') 

Π£ вас Π΅ΡΡ‚ΡŒ ΠΊΠΎΡ€Ρ‚Π΅ΠΆ ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠ΅ΠΉ.
Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΊΠΎΡ€Ρ‚Π΅ΠΆ Π² список:

 [list(i) for i in level] # list of lists 

β€” Π˜Π›Π˜ β€”

 map(list, level) 

И послС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Π²Ρ‹ Π·Π°ΠΊΠΎΠ½Ρ‡ΠΈΡ‚Π΅ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅, просто ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠΉΡ‚Π΅ ΠΈΡ… ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ:

 tuple(tuple(i) for i in edited) # tuple of tuples 

β€” Π˜Π›Π˜ β€” (Бпасибо @jamylak)

 tuple(itertools.imap(tuple, edited)) 

Π’Ρ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ массив numpy:

 >>> a = numpy.array(level1) >>> a array([[1, 1, 1, 1, 1, 1], [1, 0, 0, 0, 0, 1], [1, 0, 0, 0, 0, 1], [1, 0, 0, 0, 0, 1], [1, 0, 0, 0, 0, 1], [1, 1, 1, 1, 1, 1]]) 

Для управлСния:

 if clicked[0] == 1: x = (mousey + cameraY) // 60 # For readability y = (mousex + cameraX) // 60 # For readability a[x][y] = 1 

Π£ вас ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ список списков. ΠŸΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠΉΡ‚Π΅ ΠΊΠΎΡ€Ρ‚Π΅ΠΆ ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠ΅ΠΉ Π² список списков, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ:

 level1 = [list(row) for row in level1] 

ΠΈΠ»ΠΈ

 level1 = map(list, level1) 

ΠΈ соотвСтствСнно ΠΌΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΡ….

Но массив numpy Π±ΠΎΠ»Π΅Π΅ Ρ…ΠΎΠ»ΠΎΠ΄Π½Ρ‹ΠΉ.

ΠŸΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠ΅ΠΉ Π² список

(ЗапятыС отсутствовали ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠ°ΠΌΠΈ Π² Π·Π°Π΄Π°Π½Π½ΠΎΠΌ вопросС, ΠΎΠ½ Π±Ρ‹Π» Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ для прСдотвращСния сообщСния ΠΎΠ± ошибкС)

Бпособ 1:

 level1 = ( (1,1,1,1,1,1), (1,0,0,0,0,1), (1,0,0,0,0,1), (1,0,0,0,0,1), (1,0,0,0,0,1), (1,1,1,1,1,1)) level1 = [list(row) for row in level1] print(level1) 

Бпособ 2:

 level1 = map(list,level1) print(list(level1)) 

ΠœΠ΅Ρ‚ΠΎΠ΄ 1 ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π» β€” 0.0019991397857666016 сСкунд β€”

ΠœΠ΅Ρ‚ΠΎΠ΄ 2 взял β€” 0.0010001659393310547 сСкунд β€”

ΠŸΠΎΡ‡Π΅ΠΌΡƒ Π±Ρ‹ Π²Π°ΠΌ Π½Π΅ ΠΏΠΎΠΏΡ€ΠΎΠ±ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Ρ‚ΡŒ свой Ρ‚ΠΈΠΏ ΠΈΠ· ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠ° Π² список ΠΈ Π½Π°ΠΎΠ±ΠΎΡ€ΠΎΡ‚.

 level1 = ( (1,1,1,1,1,1) (1,0,0,0,0,1) (1,0,0,0,0,1) (1,0,0,0,0,1) (1,0,0,0,0,1) (1,1,1,1,1,1)) print(level1) level1 = list(level1) print(level1) level1 = tuple(level1) print(level1) 

Оба ΠΎΡ‚Π²Π΅Ρ‚Π° Ρ…ΠΎΡ€ΠΎΡˆΠΈ, Π½ΠΎ нСбольшой совСт:

ΠšΠΎΡ€Ρ‚Π΅ΠΆΠΈ нСизмСняСмы, Ρ‡Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΈ Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½Ρ‹. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ, Ссли Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΠΌΠ°Π½ΠΈΠΏΡƒΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹ΠΌΠΈ, Π»ΡƒΡ‡ΡˆΠ΅ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ Π² спискС, это ΡƒΠΌΠ΅Π½ΡŒΡˆΠΈΡ‚ Π½Π΅Π½ΡƒΠΆΠ½Ρ‹Π΅ Π½Π°ΠΊΠ»Π°Π΄Π½Ρ‹Π΅ расходы.

Π’ вашСм случаС ΠΈΠ·Π²Π»Π΅ΠΊΠΈΡ‚Π΅ Π΄Π°Π½Π½Ρ‹Π΅ Π² список, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ eumiro, ΠΈ послС измСнСния создайтС Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½Ρ‹ΠΉ ΠΊΠΎΡ€Ρ‚Π΅ΠΆ Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎΠΉ структуры, ΠΊΠ°ΠΊ ΠΎΡ‚Π²Π΅Ρ‚, Π΄Π°Π½Π½Ρ‹ΠΉ Школьником.

Π’Π°ΠΊΠΆΠ΅, ΠΊΠ°ΠΊ Π±Ρ‹Π»ΠΎ ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ массив numpy, это Π»ΡƒΡ‡ΡˆΠΈΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚

Π’Ρ‹ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ‹ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΡƒΡΠΊΠΎΡ€ΠΈΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρƒ, Ссли Π±Ρ‹ Π²Ρ‹ использовали Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ список, Π° Π½Π΅ список списков. Π­Ρ‚ΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎ, Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ссли всС ваши Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠ΅ списки ΠΈΠΌΠ΅ΡŽΡ‚ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹ΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€ (Ρ‡Ρ‚ΠΎ Π²Π΅Ρ€Π½ΠΎ Π² вашСм ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅, поэтому я просто ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°ΡŽ это).

 WIDTH = 6 level1 = [ 1,1,1,1,1,1, 1,0,0,0,0,1, 1,0,0,0,0,1, 1,0,0,0,0,1, 1,0,0,0,0,1, 1,1,1,1,1,1 ] print level1[x + y*WIDTH] # print value at (x,y) 

И Π²Ρ‹ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ‹ Π±Ρ‹Ρ‚ΡŒ Π΅Ρ‰Π΅ быстрСС, Ссли Π±Ρ‹ вмСсто Π±ΠΈΠ½Π°Ρ€Π½ΠΎΠ³ΠΎ поля вмСсто списка:

 WIDTH = 8 # better align your width to bytes, eases things later level1 = 0xFC84848484FC # bit field representation of the level print "1" if level1 & mask(x, y) else "0" # print bit at (x, y) level1 |= mask(x, y) # set bit at (x, y) level1 &= ~mask(x, y) # clear bit at (x, y) 

с

 def mask(x, y): return 1 << (WIDTH-x + y*WIDTH) 

Но это Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² Ρ‚ΠΎΠΌ случаС, Ссли ваши поля содСрТат Ρ‚ΠΎΠ»ΡŒΠΊΠΎ 0 ΠΈΠ»ΠΈ 1. Если Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ большС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ, Π²Π°ΠΌ придСтся

www.rupython.com

ΠžΡΡ‚Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ

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

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