Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Python_самоучитель.pdf
Скачиваний:
1296
Добавлен:
29.03.2015
Размер:
835.6 Кб
Скачать

Ревизия: 226

Глава 8. Списки

 

 

 

§8.12. Списки-параметры

Списки, как и обычные переменные тоже могут быть аргументами функций. При этом в тело функции передается ссылка на список, а не его копия. Например, функция head()

принимает в качестве параметра список, на который ссылается переменная list:

>>>def head(list):

... return list[0]

>>>numbers = [1, 2, 3]

>>>head(numbers)

1

__main__

 

numbers

[1,

2,

3]

 

 

 

 

 

head

 

list

 

 

 

Параметр list и переменная

 

 

на один и

тот же объект. На

 

numbers ссылаются

диаграмме состояний это можно отобразить так:

Например,функция deleteHead() удаляет из переданного в качестве параметра списка первый элемент:

>>>def deleteHead(list):

... del list[0]

>>>numbers = [1, 2, 3]

>>>deleteHead(numbers)

>>>print numbers [2, 3]

Возврат списка из функции так же производится по ссылке. Например, функция tail() возвращает список содержащий все элементы переданного в качестве параметра списка, кроме первого:

>>> def tail(list):

... return list[1:]

>>>numbers = [1, 2, 3]

>>>rest = tail(numbers)

>>>print rest [2, 3]

Функция tail() возвращает новый список, созданный с помощью оператора построения среза. Значение в переменной numbers при этом никак не изменилось.

§8.13. Вложенные списки

Вложенными называются списки, которые являются элементами другого списка. В приведенном ниже примере третий элемент списка l является сложенным списком:

>>> l = ["hello", 2.0, 5, [10, 20]]

89

Ревизия: 226

Глава 8. Списки

 

 

 

Если вывести list[3], то мы получим [10, 20]. Чтобы получить элемент сложенного списка, нам придется сделать два шага:

>>>elt = l[3]

>>>elt[0]

10

Другой более короткий вариант – использовать композицию:

>>> l[3][1] 20

Операторы индексирования выполняются слева на право. Поэтому приведенный пример сначала получает третий элемент из исходного списка l, а затем – первый элемент полученного вложенного списка.

§8.14. Матрицы

TODO: Можно написать немного о матрицах (где и как используются).

Вложенные списки обычно используются для представления матриц. Например,

матрицу:

 

 

1

2

3

[74

85

96]

можно представить так:

>>>matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]

Впеременной matrix хранится список с тремя элементами, в каждом из которых хранится строка матрицы тоже в виде списков. Извлечь строку матрицы мы можем обычным образом – с помощью оператора индексирования:

>>>matrix[1]

[4, 5, 6]

В свою очередь для доступа к конкретному элементу матрицы мы можем использовать композицию двух операторов индексирования: первый индекс будет определять номер строки, а второй – номер элемента (т.е. номер столбца) в ней.

>>> matrix[1][1] 5

Данный способ представления матриц является стандартным, но не единственным. Возможен вариант использования первого индекса для нумерации столбцов, а второго – для нумерации строк. Позже в 10-й главе мы познакомимся с принципиально другим способом представления матриц с помощью словарей.

§8.15. Списки и строки

Так как строки являются неизменяемыми объектами, иногда удобно их конвертировать в списки. Для этого в Питоне есть функция list(), которая в качестве параметра принимает

90

Ревизия: 226 Глава 8. Списки

любой тип последовательностей (например, строку как последовательность символов) и создает из элементов этой последовательности список:

>>> list("Crunchy Frog")

['C', 'r', 'u', 'n', 'c', 'h', 'y', ' ', 'F', 'r', 'o', 'g']

Аналогично функция str() принимает в качестве параметра любое значение и возвращает строковое представление этого значения.

>>>str(5)

'5'

>>>str(None)

'None'

>>>str(list("nope")) "['n', 'o', 'p', 'e']"

Как видно из последнего примера, функция str() может использоваться для

объединения списка символов в одну строку. Для этой же цели может использоваться функция join() из модуля string:

>>>import string

>>>char_list = list("Frog")

>>>char_list

['F', 'r', 'o', 'g']

>>> string.join(char_list, '') 'Frog'

Еще одна крайне полезная функция split() из модуля string позволяет получать

списки строк. Данная функция разбивает строку на несколько слов. По умолчанию, любое число или пробельный символ интерпретируется как разделитель между словами:

>>>import string

>>>song = "The rain in Spain..."

>>>string.split(song)

['The', 'rain', 'in', 'Spain...']

Необязательный аргумент функции может использоваться для определения разделителя между словами. В следующем примере в качестве разделителя используется строка "ai":

>>> string.split(song, 'ai') ['The r', 'n in Sp', 'n...']

Обратите внимание, что сам разделитель не фигурирует в строках, из которых составляется результирующий список.

Функция join(), по сути, осуществляет преобразование обратное функции split().Она принимает список строк и соединяет его элементы с помощью пробелов:

91

Ревизия: 226

Глава 8. Списки

 

 

 

>>>l = ['The', 'rain', 'in', 'Spain...']

>>>string.join(l)

'The rain in Spain...'

Подобно функции split(), join() тоже имеет необязательный аргумент, который задает разделитель между словами. По умолчанию, join() в качестве разделителя использует пробел.

>>> string.join(list, '_') 'The_rain_in_Spain...'

Упражнение. Разбейте строку из переменной song на слова, а затем сцепите их в

обратном порядке так, чтобы при выводе на экран слова строки выводились по одному на каждой строке.

Решений у данной задачи несколько. Самое короткое может быть реализовано с помощью встроенных операций над списками. Поэтому рекомендуем почитать справку: help(list)

92

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]