所以這是我的代碼,它嘗試將每個元素添加到串列中,而不管它們的長度。
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])
輸出回傳錯誤。
我應該在這里更改什么以確保我的代碼適用于任何給定的輸入集?
uj5u.com熱心網友回復:
可能值得考慮的一種選擇是利用現有的庫例程從不等長的串列中為您提供成對的數字。包中的zip_longest函式itertools將執行此操作,提供一系列元組。到達其中一個串列的末尾后,將使用指定的填充值填充缺失值,默認為,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 庫中,因此您無需安裝任何附加軟體包。
uj5u.com熱心網友回復:
如果需要,您可以只檢查長度并交換串列:
def elem_sum(lst1, lst2):
# Swap if needed
if len(lst1) < len(lst2):
lst1, lst2 = lst2, lst1
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
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/368260.html
下一篇:如何在Python中永久更改串列
