Перейти до змісту

Послідовності в 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']
>>>

Зауважте: функція завжди повертає список.


У вищенаведених функцій є додаткові можливості, про них ми дізнаємось у подальшому.