Python с нуля — часть 8: списки

 

PythonОсновной структурой данных в Python являются последовательности (sequence ). Каждому элементу в последовательности  присвоен номер – его позиция в последовательности, или индекс (index). Первым всегда является ноль.

В Python имеется шесть встроенных типов последовательностей, наиболее используемыми являются списки (list) и кортежи (tuple), которые мы рассмотрим далее.

Имеется несколько типов операций, которые могут выполняться с последовательностями. Это операции индексирования (indexing), срезы (slicing), добавление (adding), умножение (multiplying) и проверка членства (membership). Кроме того, в Python имеется несколько встроенных функций для получения длины последовательности и поиска наибольших и наименьших её элементов.

Списки в Python

Списки – наиболее многофункциональный тип данных в языке Python, который записывается как список элементов, разделённых запятой, заключённые в квадратные скобки. Причём данные (элементы) списка не обязательно должны быть одного типа (т.е., список может включать в себя как данные типа int, так и str и другие).

Примеры:

>>> list1 =['physics','chemistry',1997,2000];
>>> list2 =[1,2,3,4,5];
>>> list3 =["a","b","c","d"];
>>> print list1, list2, list3
['physics', 'chemistry', 1997, 2000] [1, 2, 3, 4, 5] ['a', 'b', 'c', 'd']

Как и индексы в строках, индекс в списке начинается  с нуля. Списки так же могут быть подвержены “слайсингу” или “срезу” и так далее.

Доступ к элементам списка

Что бы получить значение элемента(ов) списка – используйте квадратные скобки с указанием индекса для получения среза или отдельного элемента::

>>> list1 = ['physics', 'chemistry', 1997, 2000];
>>> list2 = [1, 2, 3, 4, 5, 6, 7 ];
>>>
>>> print "list1[0]: ", list1[0]
list1[0]:  physics
>>> print "list2[1:5]: ", list2[1:5]
list2[1:5]:  [2, 3, 4, 5]

Обновление данных в списке

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

>>> list = ['physics', 'chemistry', 1997, 2000];
>>>
>>> print "Value available at index 2 : "
Value available at index 2 :
>>> print list[2];
1997
>>> list[2] = 2001;
>>> print "New value available at index 2 : "
New value available at index 2 :
>>> print list[2];
2001

Метод append() мы арссмотрим позже.

Удаление элемента списка

Что бы удалить какой-то элемент – вы можете либо использовать оператор del, если вы точно знаете какой именно элемент надо удалить, либо использовать метод remove(), если не уверены:

>>> list1 = ['physics', 'chemistry', 1997, 2000];
>>>
>>> print list1;
['physics', 'chemistry', 1997, 2000]
>>> del list1[2];
>>> print "After deleting value at index 2 : "
After deleting value at index 2 :
>>> print list1;
['physics', 'chemistry', 2000]

Метод remove() мы рассмотрим позднее.

Базовые операции со списками в Python

Списки работают с операторами + и * так же, как и строки; эти операторы так же обозначают конкатенацию и повторение, только в результате будет создан новый список а не строка.

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

Python Expression Results Description
len([1, 2, 3]) 3 длина
[1, 2, 3] + [4, 5, 6] [1, 2, 3, 4, 5, 6] объединение
[‘Hi!’] * 4 [‘Hi!’, ‘Hi!’, ‘Hi!’, ‘Hi!’] повторение
3 in [1, 2, 3] True членство
for x in [1, 2, 3]: print x, 1 2 3 повторение

Индексы, срезы и матрицы

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

Предположим, у нас есть такой список:

>>> L = ['spam', 'Spam', 'SPAM!']
Python Expression Results Description
L[2] ‘SPAM!’ смещение всегда начинается с нуля
L[-2] ‘Spam’ отрицательный индекс: отсчёт с правой стороны списка
L[1:] [‘Spam’, ‘SPAM!’] срез получает “участки” списка

Встроенные функции и методы списков

В Python есть такие встроенные функции для работы со списками:

SN Function with Description
1 cmp(list1, list2)
сравнение элементов с обеих сторон;
2 len(list)
получение длины списка;
3 max(list)
получение наибольшего элемента списка;
4 min(list)
получение наименьшего элемента списка;
5 list(seq)
превращение кортежа в список;

В Python есть такие встроенные методы для работы со списками:

SN Methods with Description
1 list.append(obj)
добавляет obj списку;
2 list.count(obj)
подсчитывает, как часто элемент obj встречается в списке;
3 list.extend(seq)
добавляет последовательность к списку;
4 list.index(obj)
возвращает индекс объекта obj, если он найден в в списке;
5 list.insert(index, obj)
вставляет новый элемент в список на указанный индекс;
6 list.pop(obj=list[-1])
удаляет obj из списка и печатает его;
7 list.remove(obj)
удаляет obj из списка;
8 list.reverse()
меняет порядок элементов в списке на обратный;
9 list.sort([func])
сортирует объекты в списке, используя заданную функцию func, если указана;