Послідовності в Python
Послідовність в Python — ітерабельний об'єкт, який підтримує ефективний доступ до елементів за допомогою цілочислених індексів через спеціальний метод
`__getitem__()
і підтримує метод__len__()
, який повертає довжину послідовності.
До основних вбудованих типів послідовностей відносяться:
list
tuple
range
str
bytes
bytearray
Послідовності також опціонально можуть реалізовувати методи count()
, index()
, __contains__()
, __reversed__()
та інші.
Операції, які підтримуються більшістю послідовностей:
операція | опис |
---|---|
x in s, x not in s | Чи знаходиться елемент x в послідовності s (для рядків та послідовностей байтів — чи є x підрядком s) |
s + t | Конкатенація послідовностей |
s * n, n * s | Конкатенація n нерекурсивних копій послідовності s |
s[i] | i-й елемент послідовності s |
s[i:j] | Зрізання послідовності s від i до j. |
s[i:j:k] | Зрізання послідовності s від i до j з кроком k |
len(s) | Довжина послідовності |
min(s) | Мінімальний елемент послідовності |
max(s) | Максимальний елемент послідовності |
s.index(x[, i[, j]]) | індекс першого входження x (опціонально – починаючи з позиції i и до позиции j) |
s.count(x) | загальна кількість вхождень x в s |
sum(s) | сума елементів послідовності |
Більшість мутабельних послідовностей підтримують наступні операції:
операція | опис |
---|---|
s[i] = x | елемент з ідексом i замінюється на x |
s[i:j] = t, s[i:j:k] = t | елементи з індексами від i до j (з кроком k) замінюються вмістом ітерабельного об'єкта t |
del s[i:j], del s[i:j:k] | видалення відповідних елементів з послідовності |
s.append(x) | додавання x в кінець послідовності |
s.clear() | видалення усіх елементів послідовності |
s.copy() | нерекурсивна копія послідовності |
s.extend(t) | додавання усіх елементів ітерабельного об'єкта в кінець послідовності |
s.insert(i, x) | вставка елемента x по індексу i |
s.pop(), s.pop(i) | повернення значення по індексу i (за умовчанням – останній елемент) і видаленя його з послідовності |
s.remove(x) | видалення першого входження x |
s.reverse() | розворот послідовності у зворотньому порядку |
Індексація
obj[index]
index
— або ціле число (власне індекс елемента списку), або ж зрізання — об'єкт класа slice
:
>>> l=[1,2,3,4,5,6]
>>> s = slice(1, -1, 2)
>>> l[s]
[2, 4]
>>> l[1:-1:2]
[2, 4]
>>>
Множення на скаляр
s * n
Конкатенація n
неповних копій послідовності s
.
Неповна копія (shallow copy) — копіюється сам контейнер, а вміст копіюється як посилання на його елементи.
Повна копія (deep copy) — при копіюванні рекурсивно копіюються і усі елементи списка.
Якщо елементами послідовності є немутабельні об'єкти, то з точки зору функціонування таких об'єктів немає різниці будемо ми використовувати глибоке чи неглибоке копіювання. Однак з точки зору оптимізації використання неглибокого копіювання буде ефективніше завдяки меншому використанню пам'яті.