Python - 以不同的长度添加2个列表的每个元素

时间:2014-08-22 14:29:34

标签: python

以下代码可以添加相同长度的2个列表中的每个元素,但是,我希望它以不同的长度添加每个列表,例如add up list1 = [1,2]和list2 = [1,2 ,3]。

2,在第5行,如果我将代码更改为new_list = [list1[num] + list2[num]],它只会总计总数,而不会将每个元素相加,我想知道为什么?

def add_lists_V2(list1, list2):
    new_list = []
    max_list = max(list1, list2)
    for num in range(len(max_list)):
        new_list = new_list + [list1[num] + list2[num]]

    return new_list

def input_integer_list():
    nums = input("Enter integers: ")
    num_list = nums.split()
    for i in range(len(num_list)):
        num_list[i] = int(num_list[i])
    return num_list

def main():
    print("Add two lists of any size.")
    list1 = input_integer_list()
    list2 = input_integer_list()
    new_list = add_lists_V2(list1, list2)
    print("Sum of two lists:", new_list)

main()

2 个答案:

答案 0 :(得分:6)

itertools模块是你的朋友。具体而言,zip_longest虽然取决于您的最终目标,但可能会有更多可以帮助您。

>>> import itertools
>>>
>>> l1 = range(2)
>>> l2 = range(3)
>>>
>>> map(sum, itertools.zip_longest(l1, l2, fillvalue=0))
[0, 2, 2]

答案 1 :(得分:0)

我在下面提出一个解决方案,但我知道它并不是最好的。希望有人可以避免凌乱的if-else并提供更优雅的解决方案。

首先,可以简化读取和处理输入。方法map()对列表中每个元素的操作很有用。同样,map()operator.add一起可用于添加元素多个列表。要处理不同大小的列表,请使用pythonic方法制作子列表。

from operator import add

def add_lists_V2(list1, list2):
    if len(list1) > len(list2):
        m = len(list2)
        r = list1[m:]
    else:
        m = len(list1)
        r = list2[m:]
    return map(add, list1[:m], list2[:m]) + r

def input_integer_list():
    nums = input("Enter integers: ")
    return map(int,nums.split())

def main():
    print("Add two lists of any size.")
    list1 = input_integer_list()
    list2 = input_integer_list()
    new_list = add_lists_V2(list1, list2)
    print("Sum of two lists:", new_list)

main()