[英]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.