Рубрики
Без рубрики

Сумма списка Python Как Подвести итог элементов двух списков в Python

Добро пожаловать обратно в другое издание серии Python. На этот раз я хочу подвести итог элементов двух … Tagged с Python, начинающими, программированием, учебником.

Как сделать Python (серия 14 деталей)

Добро пожаловать обратно в другое издание серии Python. На этот раз я хочу суммировать элементы двух списков в Python. Я получил вдохновение для этой темы, пытаясь сделать это на работе, так что давайте посмотрим, как это происходит!

Проблема введение

Недавно я столкнулся с проблемой, когда библиотека не работала точно так, как я хотел, поэтому мне пришлось взломать результаты, чтобы сделать мою жизнь немного проще. В этом сценарии у меня была библиотека соединений, которую я использовал для перечисления всех доступных устройств. Тем не менее, функциональность списка коротко окружает определенные типы соединений, поэтому он никогда не перечислил все. В результате я был вынужден запустить функцию дважды: один раз для USB и снова для Ethernet.

Результаты этой функции списка вернули список, который выглядел примерно как следующее:

# [size, [types], [interfaces], [serial numbers], [IP addresses]]
[2, [7, 7], [1, 2], [2314567, 8374163], [0, 84302738]]

Тем не менее, я застрял в получении списков отдельно:

[1, [7], [2], [8374163], [84302738]]  # Ethernet
[1, [7], [1], [2314567], [0]]  # USB

Естественно, я хотел иметь возможность объединить два списка обратно в то, что я ожидал изначально. Тем не менее, я не был полностью уверен, как я собираюсь это сделать. Итак, давайте посмотрим на некоторые возможные решения.

Решения

Когда дело доходит до объединения двух списков, есть несколько возможных способов сделать это. Здесь только несколько.

Объединить два списка вручную

Сначала мы могли бы попробовать объединить два списка вручную. Другими словами, мы можем попробовать следующее:

ethernet_devices = [1, [7], [2], [8374163], [84302738]]
usb_devices = [1, [7], [1], [2314567], [0]]
all_devices = [
    ethernet_devices[0] + usb_devices[0],
    ethernet_devices[1] + usb_devices[1],
    ethernet_devices[2] + usb_devices[2],
    ethernet_devices[3] + usb_devices[3],
    ethernet_devices[4] + usb_devices[4]
]

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

Сумма элементов двух списков с пониманием

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

ethernet_devices = [1, [7], [2], [8374163], [84302738]]
usb_devices = [1, [7], [1], [2314567], [0]]
all_devices = [x + y for x, y in zip(ethernet_devices, usb_devices)]

Сейчас мы говорим! Это пять строк утомительного картирования, сжатого в простом понимании списка. Но подождите, становится лучше:

all_devices = [sum(pair) for pair in zip(ethernet_devices, usb_devices)]

Или это? Спасибо нашим жареным, рифмы , мы заметим, что это решение на самом деле не работает для нашей ситуации. Несмотря на то, что он выполняет отличную работу, суммируя целые числа в иерсии, он сбой, пытаясь объединить двух сублистов со следующей ошибкой:

Traceback (most recent call last):
  File "", line 1, in 
    all_devices = [sum(pair) for pair in zip(ethernet_devices, usb_devices)]
  File "", line 1, in 
    all_devices = [sum(pair) for pair in zip(ethernet_devices, usb_devices)]
TypeError: unsupported operand type(s) for +: 'int' and 'list'

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

Сумма элементов двух списков с отображением

На данный момент мы в основном ответили на наш вопрос. Тем не менее, есть еще одно решение, которое требует, возможно, еще меньше кода. Проверьте это:

ethernet_devices = [1, [7], [2], [8374163], [84302738]]
usb_devices = [1, [7], [1], [2314567], [0]]
import operator
all_devices = list(map(operator.add, ethernet_devices, usb_devices))

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

ethernet_devices = [1, [7], [2], [8374163], [84302738]]
usb_devices = [1, [7], [1], [2314567], [0]]
import numpy as np
all_devices = np.add(ethernet_devices, usb_devices)

Тем не менее, Numpy – это огромная библиотека, поэтому мы, вероятно, должны придерживаться наших списков.

Немного резюме

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

ethernet_devices = [1, [7], [2], [8374163], [84302738]]
usb_devices = [1, [7], [1], [2314567], [0]]

# The long way
all_devices = [
    ethernet_devices[0] + usb_devices[0],
    ethernet_devices[1] + usb_devices[1],
    ethernet_devices[2] + usb_devices[2],
    ethernet_devices[3] + usb_devices[3],
    ethernet_devices[4] + usb_devices[4]
]

# Some comprehension magic
all_devices = [x + y for x, y in zip(ethernet_devices, usb_devices)]

# Let's use maps
import operator 
all_devices = list(map(operator.add, ethernet_devices, usb_devices))

# We can't forget our favorite computation library
import numpy as np 
all_devices = np.add(ethernet_devices, usb_devices)

Как мы видим, есть много способов запустить элементную сумму из двух списков. Выбирайте.

Как всегда, спасибо, что заглянули! Если вы заинтересованы в том, чтобы узнать больше о Python, подумайте о Подписка на кодировщик Renegade , так что вы никогда не пропустите другую статью.

Как сделать Python (серия 14 деталей)

Оригинал: “https://dev.to/renegadecoder94/how-to-sum-elements-of-two-lists-in-python-17c7”