繁体   English   中英

如何仅打印输出的最大值

[英]How to print only the max value of an ouput

我看过很多关于这个主题的帖子,但没有一个对我有用。 出于这个原因,我问我自己的问题,具体针对我正在尝试做的事情。 我设置的代码如下。

def get_assets_for_group(ip):
    decom_match = str(ip)
    url5 = server + path1
    response = requests.request("GET", url5, headers=headers, verify=False)
    data = response.json()
    for i in data['resources']: 
        url = server+path2+str(i)
        response = requests.request("GET", url, headers=headers, verify=False)
        data = response.json()
        if decom_match in data["ip"]:
            d = {i}
            max_value = max(d)
            print("Match found!", max_value)

当我只希望它返回具有最高数字的值时,此代码的输出将为我提供所有匹配的值。 输出示例如下。

Match found! 111618
Match found! 112367
Match found! 115401
Match found! 115618
Match found! 116265
Match found! 116400
Match found! 117653

我是否使用了 max 函数错误? 请让我知道您的想法或可能的修复方法。

问题是您在只包含i的集合上应用max()函数 - 然后打印结果 - 每次找到匹配值时。 纠正这种情况的一种方法是创建一个初始集合, matches ,然后每次找到匹配项时,将其添加到该集合中。 在您完成对匹配的响应搜索后,您可以在该集合上使用max()并打印结果。

像这样的东西:

def get_assets_for_group(ip):
    decom_match = str(ip)
    url5 = server + path1
    response = requests.request("GET", url5, headers=headers, verify=False)
    data = response.json()

    matches = set()

    for i in data['resources']: 
        url = server+path2+str(i)
        response = requests.request("GET", url, headers=headers, verify=False)
        data = response.json()
        if decom_match in data["ip"]:
            matches.add(i)

    if matches:
        print("Match found!", max(matches))

您的代码中有几个问题。 您迭代您的数据,在每次迭代中创建一个新集合,并仅将这个新集合的 max 函数应用于一个条目,因此它始终是您的集合中的一个条目。 您应该使用所有找到的匹配项填充集合并在之后应用max()函数,或者检查每次迭代,如果找到了新的最大值:

    max_value = None
    for i in data['resources']: 
        url = server+path2+str(i)
        response = requests.request("GET", url, headers=headers, verify=False)
        data = response.json()
        if decom_match in data["ip"]:
            if max_value == None:
                max_value = i
            else:
                max_value = max(i, max_value)
    if max_value != None:
        print("Match found!", max_value)
    return max_value

如果没有示例数据,很难判断您在做什么,但看起来您每次在循环中都在单个值上运行max

在包含最大发现值的循环外定义一个变量,并在循环内检查当前值是否更高,如下所示:

def get_assets_for_group(ip):
    decom_match = str(ip)
    url5 = server + path1
    response = requests.request("GET", url5, headers=headers, verify=False)
    data = response.json()

    max_value = 0 # initialize max value
    for i in data['resources']: 
        url = server+path2+str(i)
        response = requests.request("GET", url, headers=headers, verify=False)
        data = response.json()
        if decom_match in data["ip"]:
            d = {i}
        # check if value is higher than last found value
        if (d > max_value):
            max_value = d

    print("Match found!", max_value)

可能是在 for 循环完成后计算最大值吗? 还要先将所有值放入列表中。

...
d=[]
    for i in data['resources']: 
        url = server+path2+str(i)
        response = requests.request("GET", url, headers=headers, verify=False)
        data = response.json()
        if decom_match in data["ip"]:
            d.append(i)

max_value = max(d)
print("Match found!", max_value)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM