Послідовності в Python
Що є спільного у списка та символьного рядка? Коли ми описували списки і рядки ми згадували що це "впорядкована послідовність". Для рядків це впорядкована послідовність символів, для списків — впорядкована послідовність елементів певних типів. Кортеж також є впорядкованою послідовністю.
До окремих символів рядків ми можемо "дістатись" за допомогою індексів. Так само можна зробити і зі списками чи кортежами з тою лише різницею, що у останніх ми вилучаємо не символи, а елементи довільних типів.
Якщо у цих трьох типів даних вже є немало спільного, то чи не можна їх якось об'єднати? Можна.
Символьні рядки, списки та кортежі в Python є послідовностями.
Перетворення послідовностей
Використовуючи приведення типів можна привести послідовність одного типу до послідовності іншого:
>>> tuple([1, 2])
(1, 2)
>>> list((1,2))
[1, 2]
>>> list('hello')
['h', 'e', 'l', 'l', 'o']
>>>
Приведення послідовностей до str
дає символьний рядок з
"читабельним" відображенням даної послідовності:
>>> str([11, 22])
'[11, 22]'
>>>
Використання list()
і tuple()
без аргументів повертає порожню послідовність:
>>> list()
[]
>>> tuple()
()
>>>
Операції з послідовностями
Те, що властиве для послідовностей одного типу є справедливим для послідовностей інших типів.
Оскільки списки і кортежі як і рядки теж є послідовностями, то зрізання можна застосовувати і до них:
>>> l = ['Alice', 'Romeo', 'Jane', "Juliette", 'John']
>>> l[1::2]
['Romeo', 'Juliette']
>>> (1, True, 3, False)[::2]
(1, 3)
>>>
Зауважте: за допомогою зрізань ми завжди отримуємо нову послідовність, але того ж самого типу як і початкова послідовність.
Конкатенація, як і для символьних рядків, працює і для списків і кортежів.
>>> l = [1, 2, 3, 4, 5]
>>> l + l[::-1]
[1, 2, 3, 4, 5, 5, 4, 3, 2, 1]
>>>
Конкатенувати можна послідовності однакових типів:
>>> (1, 2) + [3, 4]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: can only concatenate tuple (not "list") to tuple
>>>
>>> (1, 2) + tuple( [3, 4] )
(1, 2, 3, 4)
>>> [1, 2, 3] + list( 'abc' )
[1, 2, 3, 'a', 'b', 'c']
>>>
Мультиплікація:
>>> [1, 2, 3] * 2
[1, 2, 3, 1, 2, 3]
>>>
>>> 4 * (1,)
(1, 1, 1, 1)
>>>
>>> [] * 99
[]
>>>
Можна перевірити чи є певне значення у спискові чи кортежі:
>>> 'Alice' in ['Bob', 'Alice', 'Eve']
True
>>> 'Alice' not in ['Bob', 'Alice', 'Eve']
False
>>> True in ('Alice', 7, True)
True
>>>
В Python є вбудовані функції для роботи з послідовностями. Розглянемо деякі з них.
len()
Щоб дізнатись довжину списка чи кортежа, тобто кількість елементів яку вони містять,
використовують вже знайому нам вбудовану у Python функцію len()
:
>>> len((1, 2))
2
>>> len([])
0
>>>
Так що, виходить що функція len()
може приймати аргументи різних типів?
Саме так. Але зауважте, що повертає вона завжди значення типу int
.
min()
та max()
Щоб визначити мінімальний і максимальний по значенню елемент послідовності
використовують відповідні функції min()
та max()
:
>>> min([1, 2, 999, -999])
-999
>>> max((3, 2, 1))
3
>>>
Функції вимагають, щоб передані їм послідовності не були пустими:
>>> min([])
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: min() arg is an empty sequence
>>>
Зауважте: функції min()
та max()
повертають один з елементів переданої їм послідовності.
sum()
Функція sum() приймає у якості аргумента послідовність чисел і повертає суму усіх елементів аргумента.
>>> sum([1,2,3,4,5,6,7,8,9,10])
55
>>>
sorted()
Функція sorted()
у якості аргумента приймає послідовність,
а повертає список з вже відсортованими елементами цієї послідовності.
Сортування відбувається за зростанням,
тобто спочатку будуть йти елементи з меньшим значенням:
>>> sorted([3, 1, 2])
[1, 2, 3]
>>> sorted('hello')
['e', 'h', 'l', 'l', 'o']
>>>
Зауважте: функція завжди повертає список.
У вищенаведених функцій є додаткові можливості, про них ми дізнаємось у подальшому.