作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
所以这是我的代码,它尝试添加列表中的每个元素,无论其长度如何。
def elem_sum(lst1, lst2):
f_len = len(lst1) - (len(lst2) - 1)
for i in range(0, len(lst2), 1):
if f_len - i >= len(lst1):
break
else:
lst1[i] = lst1[i] + lst2[i]
return lst1
当提供某些输入(例如elem_sum([1, 2, 3], [10, 20])
)时,
输出正确返回[11, 22, 3]
而其他输入,例如elem_sum([1, 2, 3], [10, 20, 30, 40])
输出返回错误。
我应该在此处更改什么以确保我的代码适用于任何给定的输入集?
最佳答案
一个可能值得考虑的选项是利用现有的库例程为您提供来自不等长度列表的数字对。 itertools 包中的 zip_longest 函数将执行此操作,并给出元组序列。到达其中一个列表的末尾后,将使用指定的填充值填充缺失的值,默认为 None
,但您可以传递自己的填充值。
例如,
from itertools import zip_longest
lst1 = [1, 2, 3]
lst2 = [10, 20, 30, 40]
for t in zip_longest(lst1, lst2, fillvalue=0):
print(t)
给出:
(1, 10)
(2, 20)
(3, 30)
(0, 40)
因此,您可以编写函数来使用列表理解来计算每个元组的总和:
from itertools import zip_longest
def elem_sum(lst1, lst2):
return [sum(t) for t in zip_longest(lst1, lst2, fillvalue=0)]
print(elem_sum([1, 2, 3], [10, 20, 30, 40]))
给出:
[11, 22, 33, 40]
如果您使用的不是非常旧的 Python 版本,itertools
软件包位于标准 Python 库中,因此您无需安装任何附加软件包。
关于python - 如何添加不等长列表中的每个元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70141379/
我是一名优秀的程序员,十分优秀!