Возврат суммирования двух списков как элементов в новом списке - PullRequest
0 голосов
/ 04 февраля 2020

У меня есть два списка, например, [5, 6, 3] и [ 5, 7], и я хочу вернуть [6,2,0], что в основном составляет 563 + 57 = 620, где каждый элемент возвращается в новом списке. В случае переноса я получу больший список. Я могу сделать это с помощью следующего подхода в python:

a = [5,6,3]
b = [5,7]

str_a = ''.join(map(str, a))
str_b = ''.join(map(str, b))
int(str_a)+int(str_b)
lst = [int(i) for i in str(620)]
lst

. Он может быть расширен до нескольких списков и циклически проходить по спискам. Однако можно ли это сделать, просматривая каждый элемент в заданных списках? Является ли это предпочтительным методом по сравнению со строкой сопоставления и присоединения?

PS: я быстро получил несколько отрицательных голосов, когда опубликовал его. Извините, если я не был ясен, и я надеюсь, что теперь все ясно.

Спасибо за вашу помощь.

1 Ответ

0 голосов
/ 09 февраля 2020

Я получил запрошенный результат с приведенными ниже кодами, другой подход, чем тот, который предоставил Маркос, и мне удалось найти также. Единственное, что вам нужно, это заполнить массивы до maximum length + 1 с помощью numpy pad.

def elementsum2array(arr1, arr2):

    '''
    1. Make the arrays of same length padding at the beginning/left side with 0's
    so that arrays get the same same length of "maximum length + 1" (for carry at the end).
    2. Get a new array of  length "maximum length + 1".
    3. Sum the elements of the arrays from last index to first index together with carry.
    4. Fill the new array element with sum % 10.
    5. Update carry (sum // 10).
    '''

    if len(arr1) == 0 and len(arr2) > 0:
        return arr2
    if len(arr1) > 0 and len(arr2) == 0:
        return arr1
    if len(arr1) == 0 and len(arr2) == 0:
        return []
    else:
        import numpy as np
        maxlen = max(len(arr1), len(arr2))
        arr1dif = maxlen - len(arr1) + 1
        arr2dif = maxlen - len(arr2) + 1
        arr1resized = np.pad(arr1, (arr1dif, 0), 'constant')
        arr2resized = np.pad(arr2, (arr2dif, 0), 'constant')
        L  = len(arr1resized)
        arrnew = [0 for num in range(maxlen+1)]
        carry = 0
        elementsum = 0

        for i in range(L-1, -1, -1):
            elementsum = (arr1resized[i] + arr2resized[i] + carry)
            arrnew[i] = elementsum % 10
            #print(arrnew[i])
            carry = elementsum // 10
            #print(carry)
            i=i-1

    return arrnew

Пример:

arr1 = [3,2,1,0,4,9]
arr2 =     [5,1,6,4]
elementsum2array(arr1, arr2)
[0, 3, 2, 6, 2, 1, 3]

Это также было сделано в Java здесь: сумма двух массивов по элементам?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...