簡體   English   中英

如何避免使用 import 並仍然從我的 function 獲得相同的 output?

[英]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 個輸入作為列表並在lst1lst2中按元素返回求和。 lst1lst2可能有不同的長度 假設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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM