以下代码可以添加相同长度的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()
答案 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()