Создание списков в Python. Объединение списков в Python. Функция list() в Python
Популярность Python обуславливается его относительной простотой и широкими функциональными возможностями. Среди них — успешная работа со структурами данных
Что такое список в Python?
Список (list) представляет собой структуру данных, предназначенную для хранения объектов. При этом не стоит путать список с массивом.
Некоторые особенности списка в Python: - в списке можно хранить элементы разных типов; - размер списка можно изменять.
Как хранятся списки в памяти?
Во время создания списка в Python происходит резервирование пустой области в памяти. Условно можно сказать, что это некий контейнер, где содержатся ссылки на другие элементы данных. Однако в отличие от таких данных, как строка либо число, содержимое контейнера списка может меняться.
Чтобы лучше представлять вышеописанный процесс, посмотрим на картинку. Мы увидим список, который содержит ссылки на объекты 1 и 2. При этом после выполнения операции a[1] = 3, вторая ссылка станет указывать на объект № 3 (в Питоне элементы списка нумеруются, начиная с нуля).
Создание, удаление и изменение списков, а также работа с его элементами
Создать список в Python можно следующим способом:
>>> a = [] >>> type(a) <class 'list'> >>> b = list() >>> type(b) <class 'list'>
Кроме того, возможно создание списка с заранее известным набором данных:
>>> a = [1, 2, 3] >>> type(a) <class 'list'>
Если список уже есть и нужно создать копию, это тоже не проблема:
>>> a = [1, 3, 5, 7] >>> b = list(a) >>> print(a) [1, 3, 5, 7] >>> print(b) [1, 3, 5, 7]
Обратите внимание, что если вы делаете простое присваивание списков друг другу, то переменной (в нашем примере это b) присваивается ссылка на тот же самый элемент данных в памяти, как и в списке a (не на копию списка a). Таким образом, если захотите изменить список a, b тоже будет меняться.
>>> a = [1, 3, 5, 7] >>> b = a >>> print(a) [1, 3, 5, 7] >>> print(b) [1, 3, 5, 7] >>> a[1] = 10 >>> print(a) [1, 10, 5, 7] >>> print(b) [1, 10, 5, 7]
Если нужно добавить элемент в список, используем метод
>>> a = [] >>> a.append(3) >>> a.append("hello") >>> print(a) [3, 'hello']
А если требуется удалить элемент из списка в том случае, когда его значение известно, рекомендуется применение метода
>>> b = [2, 3, 5] >>> print(b) [2, 3, 5] >>> b.remove(3) >>> print(b) [2, 5]
Для удаления элемента по индексу подходит команда
>>> c = [3, 5, 1, 9, 6] >>> print(c) [3, 5, 1, 9, 6] >>> del c[2] >>> print(c) [3, 5, 9, 6]
Кроме того, можно изменить элемент списка в Python (его значение), напрямую к нему обратившись. Но для этого надо знать индекс элемента:
>>> d = [2, 4, 9] >>> print(d) [2, 4, 9] >>> d[1] = 17 >>> print(d) [2, 17, 9]
А что нужно сделать, если требуется очистить список в Python? Для этого можно заново его проинициализировать, как будто вновь его создаёте. А чтобы получить доступ к элементу списка, поместите индекс данного элемента в квадратные скобки:
>>> a = [3, 5, 7, 10, 3, 2, 6, 0] >>> a[2] 7
Можно применять и отрицательные индексы (счёт пойдёт с конца). Например, чтобы получить доступ к последнему элементу списка в Python, используют следующую команду:
>>> a[-1] 0
Также может понадобиться найти и получить из списка некоторый подсписок в заданном диапазоне индексов. Чтобы это реализовать, поместите начальный и конечный индексы в квадратные скобки и разделите их двоеточием:
>>> a[1:4] [5, 7, 10]
Объединить списки в Python тоже несложно. Объединение легко сделать с помощью метода
combo_list = [1] one_list = [4, 5] a = combo_list.extend(one_list) print(a) # [1, 4, 5]
Также в Python можно объединить список с другим, просто добавив их вместе. Это довольно простой способ объединения:
my_list = [1, 2, 3] my_list2 = ["a", "b", "c"] combo_list = my_list + my_list2 print(combo_list) # [1, 2, 3, 'a', 'b', 'c']
Как видите, объединить списки достаточно легко.
Закрепляем методы списков в Python
Знание соответствующих методов и функций в Python позволит выполнить поиск, добавить нужный элемент, сделать сортировку и т. д. Итак, давайте перечислим основные методы списков и их функции (вспомним те, что уже упоминали, плюс добавим новые):
1.
>>> a = [1, 2] >>> a.append(3) >>> print(a) [1, 2, 3]
2.
>>> a = [1, 2] >>> b = [3, 4] >>> a.extend(b) >>> print(a) [1, 2, 3, 4]
3.
>>> a = [1, 2] >>> a.insert(0, 5) >>> print(a) [5, 1, 2] >>> a.insert(len(a), 9) >>> print(a) [5, 1, 2, 9]
4.
>>> a = [1, 2, 3] >>> a.remove(1) >>> print(a) [2, 3]
5.
>>> a = [1, 2, 3, 4, 5] >>> print(a.pop(2)) 3 >>> print(a.pop()) 5 >>> print(a) [1, 2, 4]
6.
>>> a = [1, 2, 3, 4, 5] >>> print(a) [1, 2, 3, 4, 5] >>> a.clear() >>> print(a) []
7.
>>> a = [1, 2, 3, 4, 5] >>> a.index(4) 3
8.
>>> a=[1, 2, 2, 3, 3] >>> print(a.count(2)) 2
9.
>>> a = [1, 4, 2, 8, 1] >>> a.sort() >>> print(a) [1, 1, 2, 4, 8]
10.
>>> a = [1, 3, 5, 7] >>> a.reverse() >>> print(a) [7, 5, 3, 1]
11.
>>> a = [1, 7, 9] >>> b = a.copy() >>> print(a) [1, 7, 9] >>> print(b) [1, 7, 9] >>> b[0] = 8 >>> print(a) [1, 7, 9] >>> print(b) [8, 7, 9]
Сортировка с помощью функции sorted()
Давайте ещё раз вернёмся к вопросу сортировки в Python. Чтобы отсортировать данные и найти нужные значения, используют простую встроенную функцию
Стандартная сортировка:
a = [3, 2, 5 ,4, 7, 1] a = sorted(a) print(a) # [1, 2, 3, 4, 5, 7]
Сортировка кортежа:
t = ('Zane', 'Bob', 'Janet') t = sorted(t) print(t) # ['Bob', 'Janet', 'Zane']
Сортировка словаря:
d = {1:'a', 2:'b', 3:'c'} d = sorted(d) print(d) # [1, 2, 3]
Помните, что функция
Идём дальше. Мы уже упоминали ранее метод
>>> sorted({1: 'D', 2: 'B', 3: 'B', 4: 'E', 5: 'A'}) [1, 2, 3, 4, 5]
Сортировка по убыванию и возрастанию в Python
Ранее упомянутый параметр
>>> sorted(student_tuples, key=itemgetter(2), reverse=True) [('john', 'A', 15), ('jane', 'B', 12), ('dave', 'B', 10)] >>> sorted(student_objects, key=attrgetter('age'), reverse=True) [('john', 'A', 15), ('jane', 'B', 12), ('dave', 'B', 10)]
Стабильность сортировки, сложная сортировка
Начиная с Python версии 2.2, сортировки гарантированно стабильны. Речь о том, что если у записей одинаковые ключи, их порядок не меняется.
>>> data = [('red', 1), ('blue', 1), ('red', 2), ('blue', 2)] >>> sorted(data, key=itemgetter(0)) [('blue', 1), ('blue', 2), ('red', 1), ('red', 2)]
Здесь 2 записи с 'blue' сохранили изначальный порядок. Данное свойство позволяет сортировать сложные данные путём постепенных сортировок. Например, надо найти и отсортировать данные учеников как по возрасту в возрастающем порядке, так и по оценкам в порядке убывания. Сортировка буде выглядеть так:
>>> s = sorted(student_objects, key=attrgetter('age')) # по вторичному ключу >>> sorted(s, key=attrgetter('grade'), reverse=True) # по первичному [('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)]
Остались вопросы? Хотите поделиться своим личным опытом работы со списками? Нашли ошибку в тексте? Пишите комментарий!