Интерактивный учебник

Сегодня я расскажу о таком типе данных, как списки, операциях над ними и методах, о генераторах списков и о применении списков.

Что такое списки?

Списки в Python — упорядоченные изменяемые коллекции объектов произвольных типов (почти как массив, но типы могут отличаться).

Чтобы использовать списки, их нужно создать. Создать список можно несколькими способами. Например, можно обработать любой итерируемый объект (например, строку) встроенной функцией list:

>>> list(‘список’)[‘с’, ‘п’, ‘и’, ‘с’, ‘о’, ‘к’]

Список можно создать и при помощи литерала:

>>> s=[]# Пустой список>>> l=[‘s’,’p’,[‘isok’],2]>>> s[] >>> l[‘s’, ‘p’, [‘isok’], 2]

Как видно из примера, список может содержать любое количество любых объектов (в том числе и вложенные списки), или не содержать ничего.

И еще один способ создать список — это генераторы списков.

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

>>> c=[c*3forcin’list’]>>> c[‘lll’, ‘iii’, ‘sss’, ‘ttt’]

Возможна и более сложная конструкция генератора списков:

>>> c=[c*3forcin’list’ifc!=’i’]>>> c[‘lll’, ‘sss’, ‘ttt’] >>> c=[c+dforcin’list’ifc!=’i’fordin’spam’ifd!=’a’]>>> c[‘ls’, ‘lp’, ‘lm’, ‘ss’, ‘sp’, ‘sm’, ‘ts’, ‘tp’, ‘tm’]

Но в сложных случаях лучше пользоваться обычным циклом for для генерации списков.

Функции и методы списков

Создать создали, теперь нужно со списком что-то делать.

Как найти сумму всех введенных элементов списка?

Для списков доступны основные встроенные функции, а также методы списков.

Таблица «методы списков»

Метод Что делает
list.append(x) Добавляет элемент в конец списка
list.extend(L) Расширяет список list, добавляя в конец все элементы списка L
list.insert(i, x) Вставляет на i-ый элемент значение x
list.remove(x) Удаляет первый элемент в списке, имеющий значение x. ValueError, если такого элемента не существует
list.pop([i]) Удаляет i-ый элемент и возвращает его. Если индекс не указан, удаляется последний элемент
list.index(x, [start [, end]]) Возвращает положение первого элемента со значением x (при этом поиск ведется от start до end)
list.count(x) Возвращает количество элементов со значением x
list.sort([key=функция]) Сортирует список на основе функции
list.reverse() Разворачивает список
list.copy() Поверхностная копия списка
list.clear() Очищает список

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

>>> l=[1,2,3,5,7]>>> l.sort()>>> l[1, 2, 3, 5, 7] >>> l=l.sort()>>> print(l)None

И, напоследок, примеры работы со списками:

>>> a=[66.25,333,333,1,1234.5]>>> print(a.count(333),a.count(66.25),a.count(‘x’))2 1 0 >>> a.insert(2,-1)>>> a.append(333)>>> a[66.25, 333, -1, 333, 1, 1234.5, 333] >>> a.index(333)1 >>> a.remove(333)>>> a[66.25, -1, 333, 1, 1234.5, 333] >>> a.reverse()>>> a[333, 1234.5, 1, 333, -1, 66.25] >>> a.sort()>>> a[-1, 1, 66.25, 333, 333, 1234.5]

Изредка, для увеличения производительности, списки заменяют гораздо менее гибкими массивами (хотя в таких случаях обычно используют сторонние библиотеки, например NumPy).

Python, базовые функции для списков, итераторов

2010-02-09 pythonsortedreversed

В данной статье описал основные ф-ии, из стандартного набора python 2.6, для управления списками, итераторами, словарями и пр.

max, min

Получить максимальное, минимальное значение
можно задать ключ, пример как получить самую длинную строку

sum

Сумма списка

all, any

Логическая ф-ия, all возвращает True если все элементы списка равны True
any возвращает True если есть хоть один элемент списка равный True

zip

Слияние 2-х списков

dict

Получить словарь из списка

map

Обработать все элементы списка

С несколькими параметрами:
Без указания обработчика, списки склеиваются

range

Получить список чисел, range(старт, стоп, шаг)
xrange — аналогичная ф-ия, но возвращает итератор вместо списка

reduce

Вычислить значение: reduce( lambda x, y: x+y, [ 1,2,3,4 ] ) = (((1+2)+3)+4)

enumerate

Пронумеровать список
возвращает итератор

filter

Фильтровать список

iter

Получить итератор: iter( fun(), stop )

list

tuple

next

Получить следующее значение из итератора

reversed

Реверс

set

множества

sorted

Сортировка, можно задать ключ, ф-ию сравнения, реверс.
sorted( list [ ,cmp] [ ,key] [ ,reverse] )

slice

Срез листа

tee

Клонирование итератора tee( iterator [ ,n] ), n — кол-во копий

chain

Слить итераторы chain( *iters )

combinations

Получить комбинации от значений итератора

printmax([1,2,3])# 3printmin([1,2,3])# 1
printmax(['vi','linux','win'],key=lambdax:len(x))# linux
printsum([[1,2],[3,4],[5,6]],[])# [1, 2, 3, 4, 5, 6]
printall([True,False,True])# Falseprintany([True,False,True])# True
c=['a','b','c']d=[1,2,3]printzip(c,d)# [('a', 1), ('b', 2), ('c', 3)]
d=[('a',1),('b',2),('c',3)]printdict(d)# {'a': 1, 'c': 3, 'b': 2}
d=[1,2,3]printmap(lambdax:x*2,d)# [2, 4, 6]
printmap(lambdaa,b,c:a+b+c,[1,2,3,4],[2,3,4,5],[3,4,5,6])# [6, 9, 12, 15]
printmap(None,[1,2,3,4],[2,3,4,5],[3,4,5,6,10])# [(1, 2, 3), (2, 3, 4), (3, 4, 5), (4, 5, 6), (None, None, 10)]
d=range(1,10,2)printd# [1, 3, 5, 7, 9]
d=[1,2,3]printreduce(lambdax,y:x+y,d)# 6
printlist(enumerate(['a','b','c']))# [(0, 'a'), (1, 'b'), (2, 'c')]
printfilter(lambdax:x%2,[1,2,3,4,5,6])# [1, 3, 5]
a=7deff():globalaa-=1returnaprintlist(iter(f,2))# [6, 5, 4, 3]
list(xrange(5))# [0, 1, 2, 3, 4]
tuple(xrange(5))# (0, 1, 2, 3, 4)
printiter('abcdef').next()# a
printlist(reversed('abcde'))# ['e', 'd', 'c', 'b', 'a']
printset('abcdedc')# set(['a', 'c', 'b', 'e', 'd'])
printsorted('bca')# ['a', 'b', 'c']printsorted('bca',reverse=True)# ['c', 'b', 'a']printsorted(['win','linux','vi'],key=lambdax:len(x))# ['vi', 'win', 'linux']printsorted([['a',3],['b',1],['c',2]],cmp=lambdaa,b:cmp(a[1],b[1]))# [ ['b', 1], ['c', 2], ['a', 3] ]
range(10)[slice(0,7,2)]# [0, 2, 4, 6]'abcdefghqwrtyuiop'[slice(0,10,2)]# 'acegq'
a,b,c=tee(xrange(5),3)printlist(a),list(b),list(c)# [0, 1, 2, 3, 4] [0, 1, 2, 3, 4] [0, 1, 2, 3, 4]
chain('ABC','DEF')# A B C D E F
combinations('ABCD',2)# AB AC AD BC BD CDcombinations(range(4),3)# 012 013 023 123

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

Но это более pythonic для итерации по самому списку:

Если вам действительно нужны индексы, вы также можете использовать :

Модуль array определяет массивы в python. Массивы очень похожи на списки, но с ограничением на тип данных и размер каждого элемента.

Размер и тип элемента в массиве определяется при его создании и может принимать следующие значения:

Класс array.array(TypeCode [, инициализатор]) — новый массив, элементы которого ограничены TypeCode, и инициализатор, который должен быть списком, объектом, который поддерживает интерфейс буфера, или итерируемый объект.

array.typecodes — строка, содержащая все возможные типы в массиве.

Массивы изменяемы. Массивы поддерживают все списковые методы (индексация, срезы, умножения, итерации), и другие методы.

Методы массивов (array) в python

array.typecode — TypeCode символ, использованный при создании массива.

array.itemsize — размер в байтах одного элемента в массиве.

array.append(х) — добавление элемента в конец массива.

array.buffer_info() — кортеж (ячейка памяти, длина). Полезно для низкоуровневых операций.

array.byteswap() — изменить порядок следования байтов в каждом элементе массива. Полезно при чтении данных из файла, написанного на машине с другим порядком байтов.

array.count(х) — возвращает количество вхождений х в массив.

array.extend(iter) — добавление элементов из объекта в массив.

array.frombytes(b) — делает массив array из массива байт. Количество байт должно быть кратно размеру одного элемента в массиве.

array.fromfile(F, N) — читает N элементов из файла и добавляет их в конец массива.

24. Работа со списками в Python, часть вторая

Файл должен быть открыт на бинарное чтение. Если доступно меньше N элементов, генерируется исключение EOFError , но элементы, которые были доступны, добавляются в массив.

array.fromlist(список) — добавление элементов из списка.

array.index(х) — номер первого вхождения x в массив.

array.insert(n, х) — включить новый пункт со значением х в массиве перед номером n. Отрицательные значения рассматриваются относительно конца массива.

array.pop(i) — удаляет i-ый элемент из массива и возвращает его. По умолчанию удаляется последний элемент.

array.remove(х) — удалить первое вхождение х из массива.

array.reverse() — обратный порядок элементов в массиве.

array.tobytes() — преобразование к байтам.

array.tofile(f) — запись массива в открытый файл.

array.tolist() — преобразование массива в список.

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

Добавить комментарий

Закрыть меню