2014-09-19 37 views
-2

我想同時在python中將map函數應用於兩個迭代。下面是我的代碼,但它給我的錯誤爲 t is not defined如何將map函數同時應用於兩個迭代?

x = [1, 2, 3, 4] 
z = [5, 6, 7, 8] 
y,m = map(lambda w,t: x*x,t*t, x,z) 
print y 

有什麼辦法來實現應用與map兩個iterables結果呢?

PS - 我在研究地圖功能。我知道同樣可以實現與普通功能,但我想知道爲什麼以上不會工作?

我感謝您的幫助。

+5

問題是你的'lambda';它應該做什麼? – jonrsharpe 2014-09-19 21:23:57

+5

請發佈預期結果。 – wwii 2014-09-19 21:24:00

+0

非常感謝大家。我錯誤地放置了一些代碼,並且應該學習更多關於'lambda'的知識。 – GoldenPlatinum 2014-09-19 21:41:57

回答

2

首先,固定lambda,這是缺少括號指錯了名字:

lambda w, t: (w * w, t * t) 

其次,實際上map輸出,不能解壓兩個看起來名稱:

[(1, 25), (4, 36), (9, 49), (16, 64)] 

你想要zip他們嗎? y, m = zip(*map(...))給出y == (1, 4, 9, 16)

除此之外,因爲你還沒有說你想達到什麼,所以取決於你。但是,由於這兩個列表根本不互相影響,因此它們將更容易分開。

+0

謝謝。這是否意味着'lambda'應該總是在函數'(w * w,t * t)'內返回相同的名稱('lambda w,t')? – GoldenPlatinum 2014-09-19 21:37:18

+0

@GoldenPlatinum不一定,不;您可能還想使用其他名稱。儘管'x'是一個列表,所以平方沒有意義,並且沒有太多指定被忽略的參數。 – jonrsharpe 2014-09-19 21:40:23

0

map的調用實際上全文如下:應用lambda方法成參數wt,並返回x * x,該iterables應用map方法是t * txz。 感覺就像你錯過了括號lambda返回一個元組,並且還混合了wx。難道是:

print map(lambda w,t: (w * w, t * t), x, z) 
>>> [(1, 25), (4, 36), (9, 49), (16, 64)] 

你有什麼期望ym是? map返回一個迭代而不是元組。它看起來像你正在尋找一個元組清單,而不是一個元組

相關問題