[英]How can I refrain from using import and still get the same output from my function?
所以我正在嘗試編寫一個 function elem_sum(lst1:List[int], lst2:List[int])
,它將 2 個輸入作為列表並在lst1
和lst2
中按元素返回求和。 lst1
和lst2
可能有不同的長度。 假設lst1 = [a, b, c]
和 l st2 = [d, e]
。 您的 function 應該返回[a+d, b+e, c]
。
例子
elem_sum([1, 2, 3], [10, 20]) == [11, 22, 3]
elem_sum([1, 2, 3], [10, 20, 30, 40]) == [11, 22, 33, 40]
elem_sum([1], [2, 12]) == [3, 12]
這是我嘗試過的方法,它有效...
from itertools import zip_longest
def elem_sum(lst1, lst2):
return [sum(t) for t in zip_longest(lst1, lst2, fillvalue=0)]
但是,我想找到一個不使用itertools
AND Import
的解決方案......我應該在我的代碼中添加或更改什么?
如果您采用如下方法,則無需使用itertools
def elem_sum(ls1, ls2):
iter_list, other_list = (ls1, ls2) if len(ls1) < len(ls2) else (ls2, ls1)
return [sum(x) for x in zip(iter_list, other_list)]+ other_list[len(iter_list):]
一種方法是用內置的 zip function 替換 zip_longest,但正如您所知,它只會刪除較長數組的剩余元素。 所以你可以做的是使用 zip 然后只使用 append 較長數組的其余元素:
def elem_sum(lst1, lst2):
shorter_length = min(len(lst1), len(lst2))
return [sum(t) for t in zip(lst1, lst2)] + lst1[shorter_length:] + lst2[shorter_length:]
在較短的數組上使用索引[shorter_length:]
只會返回一個空數組。 因此,我們可以將它們連接起來。
Append 歸零到較短:
def elem_sum(l1, l2):
len_1 = len(l1)
len_2 = len(l2)
max_len = max(len_1, len_2)
min_len = min(len_1, len_2)
for i in range(max_len-min_len):
if len_2 < len_1:
l2.append(0)
if len_1 < len_2:
l1.append(0)
l_r = []
for i in range(max_len):
l_r.append(l1[i] + l2[i])
return l_r
print(elem_sum([1, 2, 3], [10, 20]))
print(elem_sum([1, 2, 3], [10, 20, 30, 40]))
print(elem_sum([1], [2, 12]))
Output:
[11, 22, 3]
[11, 22, 33, 40]
[3, 12]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.