python 具有两个可迭代参数的最小函数

python min function with two iterable arugments

我知道如果我使用列表或一组数字,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

map 不是应该帮我把 min 依次应用到 L1 和 L2 吗?我有点期待:

1
2

如果你想要几个列表中的每一个的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])) (除了它是一个可迭代的,而不是一个元组)。

如果您的列表是

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 在你的情况下循环 - 所以它不会 return 一个 list [1, 28, 9],而是一个 map对象。

map 对象是一种 迭代器 - 类似于 如何做到这一点的方法

为什么?因为 lists 可能 非常非常长 ,但配方仍然是相同的 - short。 )