检查长度时添加两个列表

时间:2016-11-21 04:26:30

标签: python python-2.7 list python-3.x

我遇到了一个问题,我必须在考虑长度的同时添加2个列表。例如,如果list1 = [1,2]list2 = [3,4,5]答案为[1+3,2+4,5][4,6,5]

到目前为止我所拥有的是:

def addsum(list1,list2):
    new_list = []
    if len(list1) > len(list2):
       new_list = list1[0:]+list2[0:]

我不确定如何评价这个问题,因为我是新的列表。非常感谢帮助!

5 个答案:

答案 0 :(得分:2)

您应该在列表理解中使用fillvalue 0来自itertools的zip_longest

r = [sum(i) for i in zip_longest(list1, list2, fillvalue=0)]

zip_longest将输入列表中的元素配对(此处为list1list2)。如果一个列表较小,则将较大列表的剩余元素与作为fillvalue提供的值(我们在此处分配给0)配对。

现在,r等于:

print(r) # [4, 6, 5]

同样,您可以使用map代替list-comp:

# Python 3.x
r = list(map(sum, zip_longest(list1, list2, fillvalue=0)))
# Python 2.7
r = map(sum, zip_longest(list1, list2, fillvalue=0))

并获得r的相同结果。

答案 1 :(得分:0)

穷人的做法:

collections.Counter(string)

答案 2 :(得分:0)

我也会使用zip_longest解决方案,但在我的代码中构建这就是我要做的事情

def addsum(list1, list2):
    if len(list1) < len(list2):
        list1, list2 = list2, list1
    result=list(list1)
    for i,x in enumerate(list2):
        result[i] += x
    return result

首先确保第一个列表是最长的,如果不是这样交换它们,那么制作一个最长列表的副本,最后将位置较短列表的元素添加到副本并返回< / p>

>>> addsum([1,2],[3,4,5])
[4, 6, 5]
>>> 

答案 3 :(得分:0)

虽然zip_longest更整洁,但另一种可能性是使用试错法(如果你厌倦了“ifs”),如下所示:

def addsum(list1, list2):
    res = []
    i = 0
    while i < len(list1) or i < len(list2):
        try:
            res.append(list1[i]+list2[i])
        except IndexError:
            try: res.append(list1[i])
            except IndexError: res.append(list2[i])
        i += 1
    return res

答案 4 :(得分:0)

zip_longest上的文档:

  

创建一个聚合来自每个迭代的元素的迭代器。如果迭代的长度不均匀,则使用fillvalue填充缺失值。迭代继续,直到最长的可迭代用尽。

以下是代码:

from itertools import zip_longest
[x + y for x, y in zip_longest([1,2], [3,4,5], fillvalue=0)]

输出:

[4, 6, 5]