据我所知,如果我使用一个列表或一组数字,min会给我最小的项目
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
是不是映射假设帮助我依次将min应用于L1和L2?我有点期待:
1
2
答案 0 :(得分: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]))
(除了它是可迭代的,而不是元组)。
答案 1 :(得分: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
循环case - 所以它不会返回列表 [1, 28, 9]
,而是 map
对象。
map
对象是迭代器的一种 - 作为配方的一种方法。
为什么呢?因为列表可能非常长,但配方仍然相同 - 短一个。)