Истории успеха наших клиентов — лучшие проекты
Вход/ Регистрация

Объединение списков в Python: инструкция

22624
7 минут чтения
Средний рейтинг статьи: 3

Списки в языке программирования Python создаются для хранения объектов одного или нескольких типов. При работе с ними может потребоваться объединить два или несколько списков в один, что актуально, например, при обработке баз данных. В статье мы рассмотрим различные способы выполнения этой операции.

Миграция в облако

Перенесем вашу инфраструктуру в облако — быстро,
безопасно и с гарантией результата.

Предоставим грант до 1 000 000 ₽ на облачную
инфраструктуру и возьмем на себя весь процесс.

Основные методы объединения списков Python 3

Наиболее часто используются следующие 7 методов (с некоторыми вариантами, которых мы также коснемся):

  • конкатенация с оператором +,
  • умножение с оператором *,
  • с циклом for,
  • с функцией join(),
  • с функцией extend(),
  • с функцией map(),
  • методом itertools.chain().

Рассмотрим каждый из них более подробно и приведем примеры кода.

Конкатенация с оператором +

Пожалуй, самый простой способ, который не требует особых пояснений:

    
>>> sequence1 = [57, 69, 45, 25, 36] >>> sequence2 = ['g', 'w', 'm', 'a', 't'] >>> joined = sequence1 + sequence2 >>> print(joined) [57, 69, 45, 25, 36, 'g', 'w', 'm', 'a', 't']

Мы создали два списка с целочисленными и буквенными значениями и объединили их путем простого сложения. Заметим, что при этом все элементы списков останутся на своих местах, то есть сначала будут выведены элементы sequence1, а уже за ним пойдет sequence2, причем в той же последовательности.

Умножение с оператором *

Если нужно повторить один и тот же список определенное число раз, подойдет оператор *. Посмотрим на его работу на примере одного из предыдущих списков:

    
>>> print(sequence2 * 3) ['g', 'w', 'm', 'a', 't', 'g', 'w', 'm', 'a', 't', 'g', 'w', 'm', 'a', 't']

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

Варианты с циклом for

Любителям циклического программирования подойдет такой вариант:

    
>>> numbers1 = [38, 98, 17, 37, 12] >>> numbers2 = [34, 30, 78, 75, 11] >>> for num in numbers2:            numbers1.append(num) >>> print(numbers1) [38, 98, 17, 37, 12, 34, 30, 78, 75, 11]

Мы добавили второй список к первому путем перебора каждого элемента во втором и использования метода append.

Также с помощью цикла for можно выполнить объединение двух вложенных списков Python. Допустим, у нас есть два таких вложенных списка, которые мы должны объединить:

    
>>> integers = [[60, 85], [57, 31]]

Чтобы это сделать, нужно написать следующий код:

    
>>> merged = [element for each_list in integers for element in each_list] >>> print(merged) [60, 85, 57, 31]

Добавим, что имена переменных в коде выше были специально выбраны такими для наглядности, а опытные программисты записали бы этот код примерно в таком виде, с обозначением l для списков и x для их элементов:

    
>>> merged = [x for l in integers for x in l] >>> print(merged)

Чтобы успешно программировать, всегда нужно понимать, как работает код, поэтому сначала можно делать его более наглядным, а уже затем переходить на общепринятые обозначения.

Цикл for также помогает объединять списки Python в словарь. Представим, что у нас есть база данных известных спортсменов в виде множества списков, из которых мы должны сделать единый словарь. Посмотрим, как это можно реализовать. Введите в интерпретаторе данные этих или любых других атлетов с указанием их возраста и вида спорта:

    
>>> athletes = [['Bolshunov Aleksandr', 25, 'cross_country_skiing'],                         ['Fourcade Martin', 33, 'biathlon'],                         ['Klaebo Johannes', 25, 'cross_country_skiing'],                         ['Boe Johannes', 29, 'biathlon']]

А объединить их в словарь можно с помощью следующего кода:

    
>>> athletes_dictionary = {element[0]: element[1:] for element in athletes} >>> print(athletes_dictionary) {'Bolshunov Aleksandr': [25, 'cross_country_skiing'], 'Fourcade Martin': [33, 'biathlon'], 'Klaebo Johannes': [25, 'cross_country_skiing'], 'Boe Johannes': [29, 'biathlon']}

Функция join()

Функция join() в Python помогает выполнять объединение элементов списка в строку:

    
>>> piece_of_poetry = ['Человек', 'собаке', 'друг:', 'это', 'знают', 'все', 'вокруг.'] >>> piece_string = ' '.join(piece_of_poetry) >>> print(piece_string) Человек собаке друг: это знают все вокруг.

Чтобы строка получилась с отступами между элементами, мы в качестве имени разделителя добавили в код пробел: ' '.join. Есть и более длинный вариант добавления разделителя через переменную. Слегка изменим часть кода из примера выше:

    
>>> delimit = ' ' >>> piece_str = delimit.join(piece_of_poetry) >>> print(piece_str)

Функция extend()

Еще одна простая функция, при помощи которой нетрудно объединить списки. Этот код тоже не требует пояснений:

    
>>> numbers1 = [38, 98, 17, 37, 12] >>> numbers2 = [34, 30, 78, 75, 11] >>> numbers1.extend(numbers2) >>> print(numbers1) [38, 98, 17, 37, 12, 34, 30, 78, 75, 11]

Функция map()

Польза этой функции в том, что она преобразует список, составленный из целых чисел, в строку. Причем map() хорошо работает вместе с уже известной нам join(), вот пример:

    
>>> integers = [38, 98, 17, 37, 12, 34, 30, 78, 75, 11] >>> maplist = map(str, integers) >>> delimit = ', ' >>> result = delimit.join(maplist) >>> print(result) 38, 98, 17, 37, 12, 34, 30, 78, 75, 11

Обратите внимание, что str — это обозначение объекта «строка», поэтому изменять его недопустимо (вы увидите здесь характерную подсветку синтаксиса Python). А вот integers, maplist, delimit и result изменяемые, поскольку это переменные. Мы снова выбрали «говорящие» названия, но вы можете назначить им любые другие, лишь бы они были корректными с точки зрения синтаксиса.

Метод itertools.chain()

itertools — вызываемая функция, поэтому для начала вызовем ее командой import:

    
>>> import itertools >>> integers = [39, 97, 18, 36, 11, 35, 29, 77, 74, 10] >>> letters = ['g', 'w', 'm', 'a', 't', 'y', 'c', 'k', 'b', 'u'] >>> result = list(itertools.chain(integers, letters)) >>> print(result) [39, 97, 18, 36, 11, 35, 29, 77, 74, 10, 'g', 'w', 'm', 'a', 't', 'y', 'c', 'k', 'b', 'u']

Разворачивайте Python-проекты в облаке

Cloud MSK 15

477 ₽/мес

Процессор
1 x 3.3 ГГц
Память
1 ГБ
NVMe
15 ГБ
Канал
1 Гбит/с
Публичный IP
Cloud MSK 30

657 ₽/мес

Процессор
1 x 3.3 ГГц
Память
2 ГБ
NVMe
30 ГБ
Канал
1 Гбит/с
Публичный IP

Объединение списков с сортировкой

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

    
>>> integers1 = [38, 98, 17, 37, 12, 34, 30, 78, 75, 11] >>> integers2 = [39, 97, 18, 36, 11, 35, 29, 77, 74, 10] >>> integers3 = integers1 + integers2 >>> print(integers3) [38, 98, 17, 37, 12, 34, 30, 78, 75, 11, 39, 97, 18, 36, 11, 35, 29, 77, 74, 10] >>> sorted(integers3) [10, 11, 11, 12, 17, 18, 29, 30, 34, 35, 36, 37, 38, 39, 74, 75, 77, 78, 97, 98]

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

    
>>> letters1 = ['g', 'w', 'm', 'a', 't'] >>> letters2 = ['y', 'c', 'k', 'b', 'u'] >>> letters3 = letters1 + letters2 >>> sorted(letters3) ['a', 'b', 'c', 'g', 'k', 'm', 't', 'u', 'w', 'y']

Еще короче получается код с помощью моржового оператора:

    
>>> letters1 = ['g', 'w', 'm', 'a', 't'] >>> letters2 = ['y', 'c', 'k', 'b', 'u'] >>> sorted(letters3 := letters1 + letters2) ['a', 'b', 'c', 'g', 'k', 'm', 't', 'u', 'w', 'y']

И помните, что сортировать можно только объекты одного типа: например, при попытке сортировки числовых и буквенных значений интерпретатор Python выдаст ошибку. 

22624
7 минут чтения
Средний рейтинг статьи: 3

Читайте также

Хотите внести свой вклад?
Участвуйте в нашей контент-программе за
вознаграждение или запросите нужную вам инструкцию
img-server
Пока нет комментариев