20 дек. 2000 г.

Ввведение в программирование на Python (для детей) урок 8

Списки — изменяемые последовательности.


Списки в языке программирования Python, как и строки, являются упорядоченными последовательностями. Однако, в отличии от строк, списки состоят не из символов, а из различных объектов (значений, данных), и заключаются не в кавычки, а в квадратные скобки [ ]. Объекты отделяются друг от друга с помощью запятой.
Списки могут состоять из различных объектов: чисел, строк и даже других списков. В последнем случае, списки называют вложенными.

[23, 656, -20, 67, -45]   # список целых чисел
[4.15, 5.93, 6.45, 9.3, 10.0, 11.6]   # список из дробных чисел
["Katy", "Sergei", "Oleg", "Dasha"]   # список из строк
["Москва", "Титова", 12, 148]   # смешанный список
[[0, 0, 0], [0, 0, 1], [0, 1, 0]]   # список, состоящий из списков
Как и над строками над списками можно выполнять операции соединения и повторения:

>>> [45, -12, 'april'] + [21, 48.5, 33]
[45, -12, 'april', 21, 48.5, 33]
>>> [[0,0],[0,1],[1,1]] * 2
[[0, 0], [0, 1], [1, 1], [0, 0], [0, 1], [1, 1]]
>>> 
По аналогии с символами строк, можно получать доступ к объектам списка по их индексам, извлекать срезы, измерять длину списка:

>>> li = ['a','b','c','d','e','f']
>>> len(li)
6
>>> li[0]
'a'
>>> li[4]
'e'
>>> li[0:3]
['a', 'b', 'c']
>>> li[3:]
['d', 'e', 'f']
>>> 
В отличии от строк, списки — это изменяемые последовательности. Если представить строку как объект в памяти, то когда над ней выполняются операции конкатенации и повторения, то это строка не меняется, а в результате операции создается другая строка в другом месте памяти. В строку нельзя добавить новый символ или удалить существующий, не создав при этом новой строки. Со списком дело обстоит иначе. При выполнении операций другие списки могут не создаваться, а изменяться непосредственно оригинал. Из списков можно удалять элементы, добавлять новые. При этом следует помнить, многое зависит от того, как вы распоряжаетесь переменными. Бывают ситуации, когда списки все-таки копируются. Например, результат операции присваивается другой переменной.
Символ в строке изменить нельзя, элемент списка — можно:

>>> mystr = 'abrakadabra'
>>> mylist = ['ab','ra','ka','da','bra']
>>> mystr[3] = '0'
Traceback (most recent call last):
  File "<pyshell#11>", line 1, in <module>
    mystr[3] = '0'
TypeError: 'str' object does not support item assignment
>>> mylist[1] = 'ro'
>>> mylist
['ab', 'ro', 'ka', 'da', 'bra']
>>> 
В списке можно заменить целый срез:

>>> mylist[0:2] = [10,20]
>>> mylist
[10, 20, 'ka', 'da', 'bra']
>>> 
Более сложная ситуация:

>>> alist = mylist[0:2] + [100,'it is ',200] + mylist[2:] # новый список
>>> a2list = mylist # создается вторая ссылка-переменная на первый список
>>> alist
[10, 20, 100, 'it is ', 200, 'ka', 'da', 'bra'] 
>>> a2list
[10, 20, 'ka', 'da', 'bra']
>>> a2list[0] = '!!!' # изменяем список
>>> a2list
['!!!', 20, 'ka', 'da', 'bra']
>>> mylist # обе переменные связаны с одним списком
['!!!', 20, 'ka', 'da', 'bra']
>>> 

Практическая работа

  1. Создайте два любых списка и свяжите их с переменными.
  2. Извлеките из первого списка второй элемент.
  3. Измените во втором списке последний объект. Выведите список на экран.
  4. Соедините оба списка в один, присвоив результат новой переменной. Выведите получившийся список на экран.
  5. "Снимите" срез из соединенного списка так, чтобы туда попали некоторые части обоих первых списков. Срез свяжите с очередной новой переменной. Выведите значение этой переменной.
  6. Добавьте в список-срез два новых элемента и снова выведите его.

Пример выполнения практической работы

Работа со списками в Python