【问题标题】:Python find min & max of two listsPython查找两个列表的最小值和最大值
【发布时间】:2012-04-18 06:13:47
【问题描述】:

我有两个列表,例如:

l_one = [2,5,7,9,3]
l_two = [4,6,9,11,4]

...我需要从两个列表的组合中找到最小值和最大值。也就是说,我想生成一个最小值和一个最大值。

我的问题是 - 实现这一目标的最 Pythonic 方式是什么?

非常感谢任何帮助。

【问题讨论】:

  • 这应该被标记为作业吗?

标签: python list


【解决方案1】:

(修改感谢 AndreasT 评论。删除了“min(min())”解决方案)

您甚至可能有一个更智能的解决方案,它适用于不同的 numpy 数组:

import numpy as np
i1=np.array(range(5))
i2=np.array(range(4))
i3=np.array(range(-5,5))
np.min(np.concatenate([i1,i2,i3]))

【讨论】:

  • min(min([i1,i2,i3])) 不会产生想要的结果。 min(min([10,2,3], [4,5], [10])) 给出4 作为输出,而寻求的最小值是2
【解决方案2】:

如果您想从两个列表中选择最大值或最小值。我认为以下将起作用:

from numpy import maximum
result = maximum(l_one,l_two)

比较这两个列表中的每个元素后,它会返回一个最大值。

【讨论】:

    【解决方案3】:

    可以说最易读的方式是

    max(l_one + l_two)
    

    min(l_one + l_two)
    

    不过,它会复制列表,因为l_one + l_two 创建了一个新列表。为避免复制,您可以这样做

    max(max(l_one), max(l_two))
    min(min(l_one), min(l_two))
    

    【讨论】:

    • 所以第一个将复制列表并找出格言(内存更昂贵)。但是第二种方法呢,它需要更长的速度吗?
    • @George:不,它也更快。唯一的缺点是它的阅读效果不如第一个。
    • 您能否解释一下或提供资源,以便我了解其背后的原因?我应该把这个作为一个新问题来问吗?或者它非常微不足道/取决于实现。
    • @George:背后的原因是什么?
    • @George:第一个表单创建了一个新列表,其中包含l_onel_two 中所有引用的副本。此步骤需要一些与列表长度成比例的时间。第二种形式不需要复制,因此速度更快。 (不过,它必须调用 max() 三次,因此对于非常短的列表,它甚至可能会慢一点,但对于非常短的列表,速度无论如何都无关紧要。)
    【解决方案4】:

    另一种避免复制列表的方法

    >>> l_one = [2,5,7,9,3]
    >>> l_two = [4,6,9,11,4]
    >>> 
    >>> from itertools import chain
    >>> max(chain(l_one, l_two))
    11
    >>> min(chain(l_one, l_two))
    2
    

    【讨论】:

      【解决方案5】:

      您可以将它们组合起来,然后调用 min 或 max:

      >>> l_one = [2,5,7,9,3]
      >>> l_two = [4,6,9,11,4]
      >>> min(l_one + l_two)
      2
      >>> max(l_one + l_two)
      11
      

      【讨论】:

        猜你喜欢
        • 2015-01-16
        • 2019-03-17
        • 2015-09-29
        • 1970-01-01
        • 2017-09-19
        • 2012-09-16
        • 2021-01-25
        • 1970-01-01
        • 2021-07-28
        相关资源
        最近更新 更多