2017-10-18 81 views
-2

據我所知,分給我最小的項目,如果我用一個列表或一組號碼蟒蛇分函數有兩個迭代arugments

min([5, 10])] >>> 5 
min((5, 10)) >>> 5 

但是當這是在地圖中使用:

L1 = [1, 28, 36] 
L2 = [2, 57, 9] 
for elt in map(min, L1, L2): 
    print(elt) 

它給我回:

1 
28 
9 

沒有地圖想幫我又適用分鐘到L1和L2?和我種的期待:

1 
2 
+1

閱讀['map'](文檔https://docs.python.org/ 3 /庫/ functions.html#地圖)。你基本上正在做'map(min,zip(L1,L2))' –

+0

像這樣的'map(min,[L1,L2])'在* L1 *和* L2 *周圍加括號。 –

回答

4

如果希望每個幾個名單的min,你需要創建一個列表,以手的名單(或迭代)來映射:

for elt in map(min, (L1, L2)): 
    print(elt) 

這具有調用min(L1)然後min(L2)的效果。

map可以接受任意數量的可迭代參數;它組裝所有迭代的相應元素,並將它們全部傳遞給提供的函數。所以map(min, L1, L2)(min(L1[0], L2[0]), min(L1[1], L2[1]), min(L1[2], L2[2]))類似(除了它是可迭代的,不是元組)。

+0

基本上,正如@PatrickHaugh所說,就好像他的代碼是'map(min,zip(L1,L2))'。 –

+0

明白了!謝謝! –

+0

@ChristianDean:在這種情況下,它是;但情況並非如此。它的工作原理是因爲'min'恰好要麼計算單個迭代(如果給定一個參數)的最小值或者它的所有參數的最小值(如果給定多個參數)。 – rici

0

如果你的名單

L1 = [1, 28, 36] 
L2 = [2, 57, 9] 

然後

map(min, L1, L2) 

將應用min()功能的L1相應的元素,L2

min(1, 2)  # result: 1 
min(28, 57)  # result: 28 
min(36, 9)  # result: 9 

(但將做到這一點只有在有評價它請求(所謂一懶評價) - 爲你的情況for循環 - 這樣就不會返回列表[1, 28, 9],但map對象。

map對象是排序迭代的 - 這是作爲一個配方怎麼辦呢

爲什麼?由於列表可能非常非常長,但配方仍然是相同的 - 在之一)

+0

非常感謝,它的確如同拉鍊(L1,L2) –

+0

你是對的 - 它是* like * zip()'內置函數,但它不會執行'zip()'* as一個臨時結果(產生對),但它直接產生映射函數*的返回值。 – MarianD