2017-10-18 53 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