Материал подготовлен командой Simple-Server для администраторов VPS и выделенных серверов. Команды и пути проверяйте на тестовой машине перед production.
Основные методы объединения списков 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']Как видим, все элементы выдаются в той же последовательности заданное число раз.
Любителям циклического программирования подойдет такой вариант:
>>> 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()** в 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)Еще одна простая функция, при помощи которой нетрудно объединить списки. Этот код тоже не требует пояснений:
>>> 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()** хорошо работает вместе с уже известной нам **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 — вызываемая функция, поэтому для начала вызовем ее командой 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']Нужен сервер для практики? Арендуйте VPS/VDS в России — root-доступ, NVMe, DDoS-защита и поддержка 24/7.