gpt4 book ai didi

python - 使用函数从指定索引开始对 Python 中不同长度的列表求和

转载 作者:行者123 更新时间:2023-12-01 02:25:58 26 4
gpt4 key购买 nike

如何组合从其中一个列表中的指定索引开始的多个列表,同时对各个索引处的值求和?

如果我有 3 个列表:

a = [1, 2, 3, 4, 5, 0, 0, 0, 0]
b = [2, 3, 4, 5, 6]
c = [5, 2]

如何才能将列表 bc 插入到 a 内的任何位置,并且各自的索引将求和?

例如,我可以从 a 的第一个索引开始插入列表 b,也可以从第五个索引开始插入列表 ca。其输出如下所示:

NewList = [1, 4, 6, 8, 10, *11*, 2, 0, 0]

您可以看到,在上述 a 索引处添加列表 bc 时,第五个索引处存在重叠,我想做的。

我尝试将 itertools 中的 izip_longest 与切片方法结合使用:

result = [sum(n) for n in izip_longest(a[2:], b, fillvalue=0)]  

但这会产生:

result = [5, 7, 9, 5, 6, 0, 0]

这会切断列表a中的零和一索引,这是我不想要的。但是,我想使用 izip_longest 因为我可以对不同长度的列表进行求和。

我想创建一个函数来使用任意数量的列表来执行此操作,因此 a 可以是 len = 1000 的列表,并且我可以在任何位置插入任意数量的不同长度的不同列表我想进入a,想要多少次就多少次,索引值就会求和。

最佳答案

这是一个应该满足您要求的函数:

def combine(lista, listb, index_in_list_a_to_start_insert):
# left pad list b with zeros
newb = [0]*index_in_list_a_to_start_insert + listb

# right pad shorter list
max_len = max(len(lista), len(newb))
newa = lista if len(lista) >= max_len else lista + [0]*(max_len-len(lista))
newb = newb if len(newb) >= max_len else newb + [0]*(max_len-len(newb))

# sum element-wise
return [a + b for a, b in zip(newa,newb)]

您可以通过链接此函数来运行您的示例,如下所示:

a = [1, 2, 3, 4, 5, 0, 0, 0, 0]
b = [2, 3, 4, 5, 6]
c = [5, 2]
combine(combine(a, b, 1), c, 5)

输出:

 [1, 4, 6, 8, 10, 11, 2, 0, 0]

您可能还想添加一些错误检查以确保指定的索引在范围内。

关于python - 使用函数从指定索引开始对 Python 中不同长度的列表求和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47401701/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com