【问题标题】:python min function with two iterable arugments具有两个可迭代参数的 python min 函数
【发布时间】:2018-03-29 19:41:57
【问题描述】:

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

【问题讨论】:

  • 阅读map 的文档。你基本上是在做map(min, zip(L1, L2))
  • L1L2 周围添加括号,例如 map(min, [L1, L2])

标签: python dictionary min


【解决方案1】:

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

【讨论】:

  • 基本上,正如@PatrickHaugh 所说,就好像他的代码是map(min, zip(L1, L2))
  • 知道了!!谢谢!
  • @ChristianDean:在这种情况下,它是;但是,通常情况并非如此。它之所以有效,是因为 min 恰好计算单个可迭代对象的最小值(如果给定一个参数)或所有参数的最小值(如果给定多个参数)。
【解决方案2】:

如果您的列表是

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

然后

map(min, L1, L2)

min()函数应用于L1L2对应元素

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

(但只有在有 request 来评估它(所谓的惰性评估)时才会这样做 - 在你的情况下是 for 循环 -所以它不会返回一个 list [1, 28, 9],而是一个 map 对象。

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

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

【讨论】:

  • 你是对的 - 它类似于 zip() 内置函数,但它不会将zip() 临时执行结果(产生对),但它直接产生映射函数的返回值
猜你喜欢
  • 2018-08-07
  • 2021-05-23
  • 2016-07-18
  • 1970-01-01
  • 1970-01-01
  • 2023-03-17
  • 1970-01-01
  • 1970-01-01
  • 2017-01-17
相关资源
最近更新 更多