Списки в языке программирования Python создаются для хранения объектов одного или нескольких типов. При работе с ними может потребоваться объединить два или несколько списков в один, что актуально, например, при обработке баз данных. В статье мы рассмотрим различные способы выполнения этой операции.
Основные методы объединения списков Python 3
Наиболее часто используются следующие 7 методов (с некоторыми вариантами, которых мы также коснемся):
- конкатенация с оператором + ,
- умножение с оператором * ,
- с циклом for ,
- с функцией join() ,
- с функцией extend() ,
- с функцией map() ,
- методом itertools.chain() .
Рассмотрим каждый из них более подробно и приведем примеры кода.
Конкатенация с оператором +
Пожалуй, самый простой способ, который не требует особых пояснений:
>>> sequence1 = [57, 69, 45, 25, 36]
>>> sequence2 = [‘g’, ‘w’, ‘m’, ‘a’, ‘t’]
>>> joined = sequence1 + sequence2
Python. Команды print() input()
>>> print(joined)
[57, 69, 45, 25, 36, ‘g’, ‘w’, ‘m’, ‘a’, ‘t’]
Itertools
Стандартная библиотека функций языка Python дает возможность программисту создавать определенные последовательности объектов и всячески ими манипулировать. При помощи простых итераций, действующих в цикле, можно наполнять массивы неким содержимым, а пользуясь генераторами списков – задавать более сложные условия для их формирования. Подключаемый модуль itertools позволяет расширить данный функционал.
Что такое itertools?
Данное расширение является сборником полезных итераторов, повышающих эффективность работы с циклами и генераторами последовательностей объектов. Это достигается за счет лучшего управления памятью в программе, быстрого выполнения подключаемых функций, а также сокращения и упрощения кода. Готовые методы, реализованные в данной библиотеке, принимают различные параметры для управления генератором последовательности, чтобы вернуть вызывающей подпрограмме необходимый набор объектов.
В этой статье рассматривается модуль itertools, присутствующий в 3-ей версии языка Python, хотя он также доступен и для Python 2. Чтобы воспользоваться возможностями данного пакета, стоит импортировать библиотеку, предварительно указав метод, к которому будет происходить обращение в программе. Например, для вызова функции product, следует поместить в начало файла следующую инструкцию: from itertools import product . После этого программист получает возможность обращаться к методу по его имени. Если нужно использовать несколько функций — можно их названия перечислить через запятую.
Можно так же подключить модуль itertools в Python просто записав в начале программы import itertools * . При таком подключении необходимо будет обращаться к той же функции product следующим образом: itertools.product( [аргументы функции] ) .
Бесконечная итерация
На сегодняшний день существует три функции-итератора, действие которых не прерывается автоматически.
Разнёс чужой код за 15 секунд. Часть 1 #код #айти #программирование #рефакторинг
К ним относятся методы:
С помощью этих методов можно генерировать объекты или совершать определенные действия неограниченное количество раз. Это значит, что программисту потребуется самостоятельно прервать созданный цикл.
count
Создание списков в Python. Объединение списков в Python. Функция list() в Python
Популярность Python обуславливается его относительной простотой и широкими функциональными возможностями. Среди них — успешная работа со структурами данных — это списки, кортежи, словари и множества. В нашей сегодняшней статье мы разберёмся со списками, поговорим про добавление и поиск элементов, а напоследок подробно расскажем об особенностях сортировки в Python.
Что такое список в Python?
Список (list) представляет собой структуру данных, предназначенную для хранения объектов. При этом не стоит путать список с массивом.
Некоторые особенности списка в Python: — в списке можно хранить элементы разных типов; — размер списка можно изменять.
Как хранятся списки в памяти?
Во время создания списка в Python происходит резервирование пустой области в памяти. Условно можно сказать, что это некий контейнер, где содержатся ссылки на другие элементы данных. Однако в отличие от таких данных, как строка либо число, содержимое контейнера списка может меняться.
Чтобы лучше представлять вышеописанный процесс, посмотрим на картинку. Мы увидим список, который содержит ссылки на объекты 1 и 2. При этом после выполнения операции a[1] = 3, вторая ссылка станет указывать на объект № 3 (в Питоне элементы списка нумеруются, начиная с нуля).
Создание, удаление и изменение списков, а также работа с его элементами
Создать список в Python можно следующим способом:
>>> a = [] >>> type(a) >>> b = list() >>> type(b)
Кроме того, возможно создание списка с заранее известным набором данных:
>>> a = [1, 2, 3] >>> type(a)
Если список уже есть и нужно создать копию, это тоже не проблема:
>>> 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]
Если нужно добавить элемент в список, используем метод append() :
>>> a = [] >>> a.append(3) >>> a.append(«hello») >>> print(a) [3, ‘hello’]
А если требуется удалить элемент из списка в том случае, когда его значение известно, рекомендуется применение метода remove(x) , который удалит первую ссылку на этот элемент:
>>> b = [2, 3, 5] >>> print(b) [2, 3, 5] >>> b.remove(3) >>> print(b) [2, 5]
Для удаления элемента по индексу подходит команда del имя_списка[индекс] :
>>> 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 тоже несложно. Объединение легко сделать с помощью метода extend :
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. list.append(x) — обеспечивает добавление элемента в конец списка:
>>> a = [1, 2] >>> a.append(3) >>> print(a) [1, 2, 3]
2. list.extend(L) — расширяет имеющийся список путем добавления элементов из списка L.
>>> a = [1, 2] >>> b = [3, 4] >>> a.extend(b) >>> print(a) [1, 2, 3, 4]
3. list.insert(i, x) — добавляет, а точнее, вставляет элемент х в позицию i. В качестве первого аргумента выступает индекс элемента, после которого вставляется элемент х.
>>> a = [1, 2] >>> a.insert(0, 5) >>> print(a) [5, 1, 2] >>> a.insert(len(a), 9) >>> print(a) [5, 1, 2, 9]
4. list.remove(x) — служит для удаления первого вхождения элемента х, включённого в наш список.
>>> a = [1, 2, 3] >>> a.remove(1) >>> print(a) [2, 3]
5. list.pop([i]) — обеспечивает удаление элемента из позиции i. Если применять метод без аргумента, удаляется последний элемент, находящийся в списке.
>>> a = [1, 2, 3, 4, 5] >>> print(a.pop(2)) 3 >>> print(a.pop()) 5 >>> print(a) [1, 2, 4]
6. list.clear() — просто удаляет все элементы:
>>> a = [1, 2, 3, 4, 5] >>> print(a) [1, 2, 3, 4, 5] >>> a.clear() >>> print(a) []
7. list.index(x[, start[, end]]) — позволяет вернуть индекс элемента:
>>> a = [1, 2, 3, 4, 5] >>> a.index(4) 3
8. list.count(x) — возвращает число вхождений элемента х:
>>> a=[1, 2, 2, 3, 3] >>> print(a.count(2)) 2
9. list.sort(key=None, reverse=False) — сортирует элементы списков по возрастанию. Чтобы выполнить сортировку в обратном порядке используют флаг reverse=True. Кроме того, дополнительные возможности открываются параметром key.
>>> a = [1, 4, 2, 8, 1] >>> a.sort() >>> print(a) [1, 1, 2, 4, 8]
10. list.reverse() — порядок расположения элементов меняется на обратный:
>>> a = [1, 3, 5, 7] >>> a.reverse() >>> print(a) [7, 5, 3, 1]
11. list.copy() — копирует списки:
>>> 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. Чтобы отсортировать данные и найти нужные значения, используют простую встроенную функцию sorted() , принимающую итерируемый тип и возвращающую отсортированный список.
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 = d = sorted(d) print(d) # [1, 2, 3]
Помните, что функция sorted() возвратит список каждый раз вне зависимости от того, какой тип будет передан.
Идём дальше. Мы уже упоминали ранее метод list.sort() . Так вот, он определён только для списков, зато функция sorted() позволит отсортировать любые итерируемые объекты:
>>> sorted() [1, 2, 3, 4, 5]
Сортировка по убыванию и возрастанию в Python
Ранее упомянутый параметр reverse есть не только у метода list.sort() , но и у функции sorted() . Он принимает boolean-значение и нужен для сортировки по убыванию либо возрастанию. Ниже мы сортируем учеников по убыванию их возраста:
>>> 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)]
Остались вопросы? Хотите поделиться своим личным опытом работы со списками? Нашли ошибку в тексте? Пишите комментарий!
Источник: otus.ru