Как сложить элементы двух списков?
Если важно сохранить начальные списки, то попробуем по другому:
# заполнение переменных a = [1, 2, 3, 4] b = [1, 2, 3] # обработка c = map(sum, zip(a + [0,]*(len(b)-len(a)), b + [0,]*(len(a)-len(b)))) # вывод результата print(list(c))
Вариант 3:
В Python 3.8 появился «морж» — оператор := Если важно не повторить функционал:
# заполнение переменных a = [1, 2, 3, 4] b = [1, 2, 3] # обработка c = map(sum, zip(a + [0, ] * (x := len(b) - len(a)), b + [0, ] * -x)) # вывод результата print(list(c)) Результат: > [2, 4, 6, 4]
Отслеживать
ответ дан 19 мар 2021 в 13:02
121 6 6 бронзовых знаков
Вариант забавный, но 1) он меняет исходные списки, 2) повторяет функционал itertools.zip_longest
19 мар 2021 в 13:10
Так то пусть будет, разные ответы это хорошо )
19 мар 2021 в 13:19
согласен, не без недостатков, но как вариант для «по быстрому»
19 мар 2021 в 13:20
добавил варианты без изменения исходных списков и вариант для Python 3.8 без повтора функционала
19 мар 2021 в 13:54
Если вы еще не «прошли ‘from’ ‘import'», то наиболее простой вариант выглядит вот так:
с=list(map(lambda x, y: x + y, a, b))
c1 = [x+y for x,y in zip(a,b)] + (a if len(a) >= len(b) else b)[min(len(a), len(b)):]
При необходимости обернуть это в вызов функции, надеюсь, сможете сделать самостоятельно: на вход a и b, указанные выражения — в качестве параметра в return.
Отслеживать
ответ дан 22 дек 2019 в 14:14
11.6k 2 2 золотых знака 10 10 серебряных знаков 16 16 бронзовых знаков
Спасибо тебе за ответ) мне нужно просто без комприхенш`на может просто через def и внутри def через for буду рад если поможете = )
23 дек 2019 в 8:51
Если у вас списка ВСЕГДА точно будут одной длины, то можно воспользоваться генератор списков и zip:
a = [1, 2, 3] b = [4, 5, 6] c = [x+y for x, y in zip(a, b)] print(c) #[5, 7, 9]
Но если вы НЕ уверены, что длина списков будет одинаковой хоть раз, то здесь нужно воспользоваться крутой библиотекой itertools:
from itertools import zip_longest a = [1, 2, 3] b = [4, 5, 6, 10] c = [x+y for x, y in zip_longest(a, b, fillvalue=0) #fillvalue нужен, если ваши списки разных рамеров и там где не достаёт элементов, добьёт нулями. print(c) #[5, 7, 9, 10]
Ответ на комментарий:
from itertools import zip_longest def add_list(a, b): c = [x+y for x, y in zip_longest(a, b, fillvalue=0)] return c a = [1, 2, 3] b = [4, 5, 6, 10] summ_list = add_list(a, b) print(summ_list)
Как объединить два списка в Python?
Разве эта операция не называется объединением, а не объединением ? Я всегда думал, что слияние означает объединение + сортировка.
Lenar Hoyt 08 нояб. 2014, в 02:33
Вы хотите просто добавить , или вы хотите объединить два списка в отсортированном порядке ? Какой выход вы ожидаете для [1,3,6] и [2,4,5]? Можем ли мы предположить, что оба подсписка уже отсортированы (как в вашем примере)?
smci 12 сен. 2015, в 07:51
@LenarHoyt Правильно. Слияние подразумевает какой-то произвольный или реляционный порядок на самом минимальном уровне.
Benjamin R 04 авг. 2017, в 23:08
Я знаю, что это похоже на анализ репутации, но я несколько раз читал курс, основанный на Python, и все же нашел его полезным для ознакомления.
Josiah Yoder 03 май 2018, в 15:11
Показать ещё 4 комментария
Поделиться:
concatenation
33 ответа
Лучший ответ
Вы можете использовать оператор + для их комбинирования:
listone = [1,2,3] listtwo = [4,5,6] mergedlist = listone + listtwo
>>> mergedlist [1,2,3,4,5,6]
Daniel G 12 нояб. 2009, в 08:31
Поделиться
это создает глубокую копию listone и добавляет listtwo?
Daniel F 19 апр. 2012, в 12:34
@Daniel создаст новый список с мелкой копией элементов в первом списке, а затем с мелкой копией элементов во втором списке. Используйте copy.deepcopy, чтобы получить глубокие копии списков.
Daniel G 19 апр. 2012, в 14:51
другая полезная деталь здесь: listone += listtwo приводит к listone == [1, 2, 3, 4, 5, 6]
rickcnagy 29 янв. 2014, в 16:14
@ br1ckb0t это изменит то, на что указывает listone? Итак: list3 = listone listone+=listtwo ли песни3 изменилась, а?
MikeH 19 фев. 2014, в 05:01
@MikeH Да, это меняет список3.
Guy 19 фев. 2014, в 18:11
это действительно меняет список3. Однако, если это не проблема, проще добавить два списка, а не создавать новый.
rickcnagy 20 фев. 2014, в 18:55
ВНИМАНИЕ: Я не знаю, является ли это спецификой Python3, но в некоторых случаях (массив numpy) [1,2,3] + [4] дает [5,6,7] .
Pygmalion 08 апр. 2015, в 18:27
@Pygmalion Это не специфично для Python3, но специфично для того, как массивы NumPy обрабатывают операторы. См. Ответ Дж. Ф. Себастьяна в ответе Роберта Россни для объединения массивов NumPy.
153957 16 апр. 2015, в 11:42
Показать ещё 6 комментариев
Также возможно создать генератор, который просто выполняет итерации по элементам в обоих списках. Это позволяет объединять списки (или любые итеративные) вместе для обработки без копирования элементов в новый список:
import itertools for item in itertools.chain(listone, listtwo): # do something with each list item
Robert Rossney 12 нояб. 2009, в 20:44
Поделиться
Это лучший способ, потому что он также работает с массивом numpy.
d.putto 25 сен. 2012, в 09:37
будет ли это работать так же: mergedList = itertools.chain (listone, listtwo) для элемента в mergedList:
zakdances 01 март 2013, в 00:55
@ d.putto: доступ к отдельным элементам для медленных массивов очень медленный (при каждом доступе требуется преобразовать необработанную память с типом C в объект Python. Векторизованные операции, такие как np.dot() работают с типами C напрямую, без np.dot() на Python и, следовательно, быстро). Вы можете использовать merged = np.r_[a, b] чтобы получить объединенный массив numpy.
jfs 30 апр. 2014, в 03:38
Показать ещё 1 комментарий
Вы можете использовать наборы для получения объединенного списка уникальных значений
mergedlist = list(set(listone + listtwo))
Radagast 20 сен. 2010, в 09:24
Поделиться
это потеряет информацию о заказе.
aaronasterling 20 сен. 2010, в 08:45
Правда, однако, он также удалит дубликаты, если это то, что вас интересует. Добавление списка не сделает этого.
metasoarous 21 авг. 2012, в 00:28
Как это сделать и сохранить информацию о заказе?
Natim 29 янв. 2013, в 13:12
Лучше, чем listone + [x for x in listtwo if x not in listone]
Natim 29 янв. 2013, в 13:13
Если бы у меня был список списков, такой как этот: [[0, 5], [1, 10], [0, 7], [3, 5]] Как бы вы их объединили, чтобы избежать дублирования в ключе ( первое значение в каждом подсписке), но если они являются дубликатами, в итоге получается сумма вторых значений? Вот так: [[0, 12], [1, 10], [3, 5]] Спасибо
Jose Salvatierra 23 июль 2013, в 12:24
@jslvtr Это может стоить отдельного вопроса
andrewb 17 авг. 2013, в 02:06
+1 ИМХО это правильный способ «объединения» (объединения) списков, в то время как «одобренный» ответ описывает, как объединять / добавлять списки (мультимножество)
alfasin 27 апр. 2014, в 04:07
Если вы заботитесь о поддержании порядка ввода, import collections; mergedlist = list(collections.OrderedDict.fromkeys(listone + listtwo)) сделает import collections; mergedlist = list(collections.OrderedDict.fromkeys(listone + listtwo)) дело.
SethMMorton 15 дек. 2016, в 20:11
Показать ещё 6 комментариев
Python >= 3.5 альтернатива: [*l1, *l2]
Несмотря на то, что это старый ответ, другая альтернатива была введена посредством принятия PEP 448 который заслуживает упоминания.
PEP под названием » Дополнительные распаковывающие обобщения», как правило, уменьшал некоторые синтаксические ограничения при использовании выделенного * выражения в Python; вместе с ним объединение двух списков (применимо к любому итерабельному) теперь также можно выполнить с помощью:
>>> l1 = [1, 2, 3] >>> l2 = [4, 5, 6] #unpack both iterables in a list literal >>> joinedList = [*l1, *l2] >>> print(joinedList) [1, 2, 3, 4, 5, 6]
Эта функциональность была определена для Python 3.5 она не была обращена к предыдущим версиям в семействе 3.x В неподдерживаемых версиях SyntaxError будет поднят.
Как и в случае с другими подходами, это также создает неглубокую копию элементов в соответствующих списках.
Достоинством такого подхода является то, что вы на самом деле не нужны списки для того, чтобы выполнить его, ничего, что итератор будет делать. Как указано в ОПТОСОЗ:
Это также полезно как более читаемый способ суммирования итераций в список, такой как my_list + list(my_tuple) + list(my_range) который теперь эквивалентен только [*my_list, *my_tuple, *my_range] .
Таким образом, в то время как добавление с + TypeError бы TypeError из-за несоответствия типа:
l = [1, 2, 3] r = range(4, 7) res = l + r
res = [*l, *r]
потому что он сначала распакует содержимое итераций, а затем просто создаст list из содержимого.
8 методов для сложения и объединения списков в Python
В этой теме мы обсудим методы для сложения и объединения двух или более списков с разными функциями в Python. Прежде чем перейти к рассмотрению концепций, давайте кратко познакомимся со списком Python. Список Python — это набор нескольких элементов, сгруппированных под одним именем. Он может хранить элементы данных различных типов (целые, строковые, с плавающей запятой и т. д.) внутри квадратных скобок [], разделенных запятой(,).
Программа для печати списка Python
# list of characters List1 = ['A', 'B', 'C', 'D', 'E'] # list of integers List2 = [1, 2, 3, 4, 5,] # mixed lists List3 = ['A', 1, 'C', 'E', 5, 8] print(" Display the List1 ", List1) print(" Display the List2 ", List2) print(" Display the List3 ", List3)
Display the List1 ['A', 'B', 'C', 'D', 'E'] Display the List2 [1, 2, 3, 4, 5] Display the List3 ['A', 1, 'C', 'E', 5, 8]
Когда мы объединяем два или более списков вместе в программе Python, получается объединенный список. И этот процесс называется составлением или объединением списков.
Давайте обсудим различные способы объединения двух или более списков в Python:
- Объединяйте списки в Python с помощью функции join() и разделителей.
- Присоединяйтесь к списку с помощью функции join() без разделителей.
- Присоединяйтесь к списку двух целых чисел в Python с помощью функции map().
- Объедините два списка в Python, используя цикл for и функцию append().
- Объедините несколько списков с помощью метода itertools.chain().
- Соединяйте списки с помощью оператора(+).
- Соедините два списка в Python с помощью оператора умножения(*).
- Объедините списки с помощью функции extend().
Объединение списков с помощью функции join()
Функция join() используется для присоединения повторяющегося списка к другому списку, разделенному указанными разделителями, такими как запятая, символы, дефис и т. д.
str_name.join( iterable)
str_name: это имя разделителя, разделяющего повторяющийся список.
iterable: это список, который содержит набор элементов и объединяется с разделителем.
Возвращаемое значение: возвращает объединенный список, разделенный указанными разделителями.
Примечание. Если итерируемый список содержит какие-либо нестроковые значения или элементы, он вызывает исключение TypeError.
Программа для объединения двух списков с помощью функции join() и разделителя
List1 = [ "Apple", "Orange", "Banana", "Mango", "Grapes" ] Str2 = ", " # It is the comma delimiter # use join() function to join List1 with the " . " delimiter Str2 = Str2.join( List1) # print the join list print(" Display the concatenated List1 using join() function and delimiter", Str2) List2 = [ "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday" ] Str3 = " - " # It is the hyphen delimiter # use join() function to join List2 with the " - " delimiters Str3 = Str3.join( List2) # print the join list print(" Display the concatenated List2 using join() function and delimiter", Str3)
Display the concatenated List1 using join() function and delimiter Apple, Orange, Banana, Mango, Grapes Display the concatenated List2 using join() function and delimiter Sunday - Monday - Tuesday - Wednesday - Thursday
Программа для присоединения к списку без использования разделителя
# declare a python list Lt1 = [ 'j', 'a', 'v', 'a', 't', 'p', 'o', 'i', 'n', 't' ] print( " Display the elements of the List L1 " , Lt1) L2 = ' ' # declare any empty string without defining any delimiter Ret = L2.join( Lt1) # use join method to join L1 list with L2 print( " Display the List without using delimiters", Ret)
Display the elements of the List L1 ['j', 'a', 'v', 'a', 't', 'p', 'o', 'i', 'n', 't'] Display the List without using delimiters j a v a t p o i n t
Присоединение к списку двух целых чисел с помощью функции map()
Целочисленный список: он собирает все целые числа в списке, называемом целочисленным списком, и мы не можем объединить два целочисленных списка в Python с помощью функции join(). Поэтому мы используем функцию map(), которая преобразует целочисленный список в строку. После этого мы используем функцию join() для объединения результатов функции map() с соответствующими разделителями.
map(str, list_name)
В приведенном выше синтаксисе функция map() имеет два параметра: list_name и str. Где list_name — это имя списка целых чисел, а str — строка. Функция map() преобразует list_name в строку (str).
Программа для использования функции map() и функции join() в списке
Давайте создадим программу для преобразования заданного списка целых чисел в строку, используя функцию map(), а затем функцию join() для присоединения к списку.
lt = [1, 2, 3, 4, 5] # use map() function to convert integer list into string list_map = map(str, lt) lt2 = ', ' # use join() function to join lists and delimiter comma(,) res = lt2.join(list_map) print(" Display the concatenated integers list using map() and join() function ", res)
Display the concatenated integers list using map() and join() function 1, 2, 3, 4, 5
Программа для объединения двух списков в Python с помощью цикла for и функции append()
Функция append() используется для последовательного добавления или присоединения каждого элемента повторяющегося списка в конце другого списка с помощью цикла for. Давайте создадим простую программу для добавления элементов списка в конец другого списка с помощью функции append().
List1 = [1, 2, 3, 4, 5] # declare List1 List2 = [5, 6, 7, 8, 9, 10] # declare List2 print(" Given List1 ", List1) print(" Given List2 ", List2) # use for loop to iterate each element of Lt1 to l2 for i in List2: List1.append(i) # use append() function to insert each elements at the end of Lt1 print(" Display concatenation list using append() function ", List1)
Given List1 [1, 2, 3, 4, 5] Given List2 [5, 6, 7, 8, 9, 10] Display concatenation list using append() function [1, 2, 3, 4, 5, 5, 6, 7, 8, 9, 10]
Объединение нескольких списков с использованием метода itertools.chain()
Давайте создадим простую программу на Python для объединения нескольких списков с помощью метода chain(), импортировав пакет itertools.
# use Python itertools.chain() method to join two list import itertools # declare different lists a = [1, 2, 3, 4, 5] b = [6, 7, 8, 9, 10] c = [11, 12, 13, 14, 15] print(" Display the first list ", a) print(" Display the second list ", b) print(" Display the third list ", c) # use itertools.chain() method to join the list result = list(itertools.chain(a, b, c)) # pass the result variable in str() function to return the concatenated lists print(" Concatenated list in python using itertools.chain() method ", str(result))
Display the first list [1, 2, 3, 4, 5] Display the second list [6, 7, 8, 9, 10] Display the third list [11, 12, 13, 14, 15] Concatenated list in python using itertools.chain() method [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]
Программа для объединения двух списков с помощью оператора +
Рассмотрим пример объединения двух списков в Python с помощью оператора(+) плюс.
# Create a program to join two lists in Python using the '+' operator # declare two lists of characters list1 = [ 'A', 'B', 'C', 'D', 'E'] list2 = [ 'F', 'G', 'H', 'I', 'J'] # join two characters lists using '+' operator lt_sum1 = list1 + list2 # declares two lists of integers list3 = [ '1', '2', '3', '4', '5'] list4 = [ '6', '7', '8', '9', '10'] # join two integers lists using '+' operator lt_sum2 = list3 + list4 # display the concatenation list print(" Join two list of characters in Python using + operator: ", str(lt_sum1)) # display the concatenation list print(" Join two list of integers in Python using + operator: ", str(lt_sum2))
Join two list of characters in Python using + operator: ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J'] Join two list of integers in Python using + operator: ['1', '2', '3', '4', '5', '6', '7', '8', '9', '10']
Объединение двух списков с оператором умножения(*)
Рассмотрим пример объединения двух списков в Python с помощью оператора *.
# declare two lists of characters List1 = [ 'A', 'B', 'C', 'D', 'E'] List2 = [ 'F', 'G', 'H', 'I', 'J'] print(" Display character List1 ", List1) print(" Display character List2 ", List2) # join two characters lists using '*' operator lt_sum1 = [*List1, *List2] # declares two lists of integers List3 = [ 1, 2, 3, 4, 5] List4 = [ 6, 7, 8, 9, 10] print(" Display integer List3 ", List3) print(" Display integer List4 ", List4) # join two integers lists using '*' operator lt_sum2 = [*List3, *List4] # display the concatenation list print(" Join two characters list in Python using * operator: "+ str(lt_sum1)) # display the concatenation list print(" Join two integers list in Python using * operator: "+ str(lt_sum2))
Display integer List3 [1, 2, 3, 4, 5] Display integer List4 [6, 7, 8, 9, 10] Join two characters list in Python using * operator: ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J'] Join two integers list in Python using * operator: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
Метод extend() для объединения двух списков в Python
Напишем простую программу для объединения двух списков с помощью метода extend() в Python.
# takes two integers lists List1 = [5, 10, 5] List2 = [ 2, 4, 6, 8] print(" Display the List1 ", List1) print(" Display the List1 ", List2) # takes two string lists List3 = [ 'RED', 'BLUE', 'BLACK'] List4 = [ 'BROWN', 'PURPLE', 'GREY' ] print(" Display the List3 ", List3) print(" Display the List4 ", List4) # use extend() method to join two lists List1.extend(List2) List3.extend(List4) # print concatenation lists print( "\n Adding two lists of integers in Python using the extend() function: ", str(List1)) print( "\n Adding two lists of strings in Python using the extend() function: ", str(List3))
Display the List1 [5, 10, 5] Display the List1 [2, 4, 6, 8] Display the List3 ['RED', 'BLUE', 'BLACK'] Display the List4 ['BROWN', 'PURPLE', 'GREY'] Adding two lists of integers in Python using the extend() function: [5, 10, 5, 2, 4, 6, 8] Adding two lists of strings in Python using the extend() function: ['RED', 'BLUE', 'BLACK', 'BROWN', 'PURPLE', 'GREY']
Как объединить два списка?
Нужно не нарушать порядок элементов списка, добавить только недостающие элементы в конец. Нашел только решение в библиотеке NumPy, но она мне не подходит, т.к. нужно загрузить решение задачи на сайт с автоматической системой тестов.
Отслеживать
25k 4 4 золотых знака 20 20 серебряных знаков 36 36 бронзовых знаков
задан 26 дек 2022 в 7:54
63 7 7 бронзовых знаков
Метки python-2.x и python-3.x вместе имеет смысл ставить только если вам нужно, чтобы код работал и на Python 2, и на Python 3. Вы уверены что поддержка Python 2 вам нужна?
26 дек 2022 в 8:04
4 ответа 4
Сортировка: Сброс на вариант по умолчанию
Из первого массива сделайте set.
Если порядок недостающих элементов тоже важен, то пройдите по второму с проверкой — если текущего элемента нет в set — добавьте его к первому массиву
Отслеживать
ответ дан 26 дек 2022 в 8:00
51.5k 3 3 золотых знака 18 18 серебряных знаков 42 42 бронзовых знака
Можно сходу придумать кучу способов с разной степенью ручного вмешательства. Наиболее «автоматический» наверное будет такой:
c = list(dict.fromkeys(a + b))
Но работает данный способ только начиная с какой-то версии питона, когда сортировка элементов в словарях стала устойчивой. В более ранних версиях порядок элементов может нарушиться.
А типовой «ручной» способ — с помощью спискового сокращения выбрать те элементы второго списка, которых нет в первом, и добавить получившийся список к первому списку.
