Простой Python. Современный стиль программирования (Любанович) - страница 34


Если вы хотите размещать в последовательности только уникальные значения, множество (set) может оказаться лучшим вариантом, чем список. В предыдущем примере список big_birds вполне может быть множеством. О множествах вы можете прочесть далее в этой главе.

Преобразование других типов данных в списки с помощью функции list()

Функция list() преобразует другие типы данных в списки. В следующем примере строка преобразуется в список, состоящий из односимвольных строк:

>>>> list('cat')

>['c', 'a', 't']

В этом примере кортеж (этот тип мы рассмотрим сразу после списков) преобразуется в список:

>>>> a_tuple = ('ready', 'fire', 'aim')

>>>> list(a_tuple)

>['ready', 'fire', 'aim']

Как я упоминал в подразделе «Разделяем строку с помощью функции split()» раздела «Строки» главы 2, можно использовать функцию split(), чтобы преобразовать строку в список, указав некую строку-разделитель:

>>>> birthday = '1/6/1952'

>>>> birthday.split('/')

>['1', '6', '1952']

Что, если в оригинальной строке содержится несколько включений строки-разделителя подряд? В этом случае в качестве элемента списка вы получите пустую строку:

>>>> splitme = 'a/b//c/d///e'

>>>> splitme.split('/')

>['a', 'b', '', 'c', 'd', '', '', 'e']

Если бы вы использовали разделитель //, состоящий из двух символов, то получили бы следующий результат:

>>>> splitme = 'a/b//c/d///e'

>>>> splitme.split('//')

>>>>

>['a/b', 'c/d', '/e']

Получение элемента с помощью конструкции [смещение]

Как и для строк, вы можете извлечь одно значение из списка, указав его смещение:

>>>> marxes = ['Groucho', 'Chico', 'Harpo']

>>>> marxes[0]

>'Groucho'

>>>> marxes[1]

>'Chico'

>>>> marxes[2]

>'Harpo'

Опять же, как и в случае со строками, отрицательные индексы отсчитываются с конца строки:

>>>> marxes[-1]

>'Harpo'

>>>> marxes[-2]

>'Chico'

>>>> marxes[-3]

>'Groucho'

>>>>


Смещение должно быть корректным значением для списка — оно представляет собой позицию, на которой располагается присвоенное ранее значение. Если вы укажете позицию, которая находится перед списком или после него, будет сгенерировано исключение (ошибка). Вот что случится, если мы попробуем получить шестого брата Маркс (Marxes) (смещение равно 5, если считать от нуля) или же пятого перед списком:

>>>> marxes = ['Groucho', 'Chico', 'Harpo']

>>>> marxes[5]

>Traceback (most recent call last):

>···File "", line 1, in

>IndexError: list index out of range

>>>> marxes[-5]

>Traceback (most recent call last):

>···File "", line 1, in

>IndexError: list index out of range

Списки списков

Списки могут содержать элементы различных типов, включая другие списки, что показано далее: