python - 在 Python 中的同一迭代中查找最小值和最大值

标签 python max min

我有以下代码:

max=max(len(j.links) for j in roads.junctions())
min=min(len(j.links) for j in roads.junctions())

roads.junctions() 返回一个包含近 100 万个路口的列表。 有没有办法在一行中找到同一迭代中项目的最小值和最大值(而不是编写一个计算它们的函数)?

最佳答案

您无法在一行中同时获得最小值和最大值,但您可以通过一个简单的循环获得它们:

min_value, max_value = float('inf'), float('-inf')
for j in roads.junctions():
    value = len(j.links)
    if value < min_value:
        min_value = value
    if value > max_value:
        max_value = value

这会产生与 min()max() 相同复杂度的值:O(N),因此是线性复杂度。它还会单独查看每个值,不需要所有值都在内存中的单个列表中。

当然你总是可以把它包装成一个函数:

def min_and_max(iterable):
    min_value, max_value = float('inf'), float('-inf')
    for value in iterable:
        if value < min_value:
            min_value = value
        if value > max_value:
            max_value = value
    return min_value, max_value

min_value, max_value = min_and_max(len(j.links) for j in roads.junctions())

关于python - 在 Python 中的同一迭代中查找最小值和最大值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26982674/

相关文章:

R dplyr 逐行获取 which.min 的名称

python - 使用多线程加速 Pandas 数据帧的创建

python - 使用 Python 日志记录管理记录器

mysql - SELECT MAX() 和同一行中的相应字段

mysql - MySQL中如何获取列的最大值

python-3.x - 在合并时应用函数

python - 使用 imaplib,如何创建没有\\NoSelect 属性的邮箱

python - 如何在 Python 中优化这个循环?

numpy 数组中部分最大值的 pythonic 方式

javascript - Max-Mn Sum JavaScript HackerRank 挑战