gpt4 book ai didi

python - 使用 *args 和指定的列表索引对列表求和

转载 作者:太空宇宙 更新时间:2023-11-03 14:12:10 25 4
gpt4 key购买 nike

我之前在 Stack Overflow 上发布了一个问题,询问如何组合由整数值组成的列表,同时对各个索引处的值求和 ( Summing lists of different lengths in Python beginning at a specified index using a function )。我从 @pault 得到了一个很好的答案,但现在我想知道是否可以在函数中使用 *args 来添加任意数量的列表。

例如,我可以有 4 个列表(或任意数量):

a = [0, 1, 2, 3, 4, 5, 6, 7]
b = [2, 4, 6, 8, 10, 12]
c = [1, 1, 1, 1, 1]
d = [2, 2, 2, 2, 2]

我想将列表 bcd 插入到 a 内的指定索引中。所以我可以说,在 a[2] 插入列表 b,在 a[2] 插入 cd位于a[5]。结果将是[0 1 5 8 11 16 19 21]

这是我当前使用的代码(归功于@pault):

a = [0, 0, 0, 0, 0, 0, 0, 0, 0]
b = [1, 1, 1, 1, 1, 1, 1, 1, 1]
c = [5, 2]

def combine(lista, listb, index_in_list_a_to_start_insert):

newb = [0]*index_in_list_a_to_start_insert + listb
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))

return [a + b for a, b in zip(newa,newb)][0:len(a)]

要点是在任何索引处将任意数量的列表添加到 a 中,同时保持 a 的长度相同,例如,如果我添加列表 b 位于 a[6],结果将为 [0, 1, 2, 3, 4, 5, 8, 11]。我认为我最大的问题是将列表与我希望将其插入的索引相关联,例如将列表 b 放入 a[3] 并指定列表 c 进入 a[4] 等,同时保持列表 a 的长度相同,所以也许必须与**kwargs?类似于 {'list': 'index'}?我真的不知道该怎么办。我正在使用Python 3.4.3。

最佳答案

如果我正确理解你的问题,你实际上需要做的就是将 listb 放入列表列表中。

要对 combine 进行最少的更改,请使用 listb 迭代 zip 的每个项目和每个索引,这两者现在都应该是列表的列表:

def combine(lista, listb, index_in_list_a_to_start_insert):
if isinstance(listb[0], list): # check if the first item in listb
# is a list; check for empty lists
for actual_list_b, actual_insert_index in zip(listb, index_in_list_a_to_start_insert):
lista = combine(lista, actual_list_b, actual_insert_index)
return lista

newb = [0]*index_in_list_a_to_start_insert + listb
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))

return [a + b for a, b in zip(newa,newb)][0:len(a)]

并使用上面的示例列表:

>>> a = [0, 1, 2, 3, 4, 5, 6, 7]
>>> b = [2, 4, 6, 8, 10, 12]
>>> c = [1, 1, 1, 1, 1]
>>> d = [2, 2, 2, 2, 2]
>>>
>>> combine(a, [b, c], [3, 4])
[0, 1, 2, 5, 9, 12, 15, 18]
>>>

您需要为 listb 和索引列表添加更多 isinstance() 检查,以确保两者都是列表或都不是列表且长度相同,其中最短的一个确定 zip 的结果.

关于python - 使用 *args 和指定的列表索引对列表求和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48417972/

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