這是任務:創建一個函數my_map_k,該函數采用函數 f 和 k 列出 L 1 ,...,L k,對于任意 k ≥ 1,并返回列表 [f(L 1 [0],...,L k [ 0]),...,F(L 1 [N-1],...,L ? [N-1])],其中n是最短的長度L我列表。暗示。使用 Python 的*符號來處理任意數量的列表作為參數。例子:my_map_k(lambda x, y, z: x*y*z, [3, 2, 5], [2, 7, 9], [1, 2])應該返回[6, 28]。這是我已經走了多遠,但我被卡住了。def my_map_k(f, *L):
n = len(min(*L, key=len))
x=0
while x < n:
return [f(*L[x],) for x in L]
my_map_k(lambda x, y, z: x*y*z, [3, 2, 5], [2, 7, 9], [1, 2])問題是,我不能只說有 3 個列表,因為可能還有更多。此外,我看不到如何從所有三個列表中取出第一個元素。
3 回答

慕姐4208626
TA貢獻1852條經驗 獲得超7個贊
我想到了:
def my_map_k(f, *L):
z = zip(*L)
l = list(z)
return ([f(*x) for x in l])
my_map_k(lambda x, y, z: x*y*z, [3, 2, 5], [2, 7, 9], [1, 2])

月關寶盒
TA貢獻1772條經驗 獲得超5個贊
沒有輔助函數的解決方案:
from operator import add
def my_map_k(f, *L):
ind = 0
while True:
try:
yield f(*[l[ind] for l in L])
except IndexError:
break
else:
ind += 1
result = my_map_k(add, range(5), range(5))
print(list(result))
# [0, 2, 4, 6, 8]
添加回答
舉報
0/150
提交
取消