Python实现指定球队最高与最低胜场的百分比变化计算求助
解决指定球队胜场排序与百分比变化计算问题
我来帮你搞定这个需求!咱们先调整下现有代码的逻辑,让它更高效地筛选数据、排序,然后完成百分比变化的计算。
步骤1:优化数据筛选与排序
首先,我们可以先筛选出指定球队的数据,再进行排序,这样比先排序整个数据集更高效。同时修正代码里的小问题(比如import语句要分开写,正确导入itemgetter):
import requests import json from operator import itemgetter # 替换成你的API地址 url = 'api url' response = requests.get(url) data = json.loads(response.content) # 指定要处理的球队列表 lookup = ["CARDINALS", "BUFFALO", "DOLPHINS", "COWBOYS"] # 筛选出目标球队的数据 filtered_teams = [team for team in data if team["team_id"] in lookup]
步骤2:按胜场排序并赋值给变量
接下来,我们对筛选后的球队数据分别按胜场升序和降序排序,赋值给两个变量:
# 按胜场升序排序(从低到高) sorted_wins_asc = sorted(filtered_teams, key=itemgetter('wins')) # 按胜场降序排序(从高到低) sorted_wins_desc = sorted(filtered_teams, key=itemgetter('wins'), reverse=True) # 如果只需要胜场数值的列表,也可以这样提取 win_values = [team["wins"] for team in filtered_teams] wins_asc = sorted(win_values) # 升序胜场列表 wins_desc = sorted(win_values, reverse=True) # 降序胜场列表
步骤3:计算最高与最低胜场的百分比变化
百分比变化的计算公式是:((最高胜场 - 最低胜场) / 最低胜场) * 100,我们可以从排序后的列表中直接取首尾值来计算:
# 获取最低和最高胜场 min_win = wins_asc[0] max_win = wins_desc[0] # 计算百分比变化(处理除数为0的边界情况,避免报错) if min_win == 0: percentage_change = 0.0 print("最低胜场为0,无法计算百分比变化") else: percentage_change = ((max_win - min_win) / min_win) * 100 print(f"最高胜场与最低胜场的百分比变化为:{percentage_change:.2f}%") print(f"最低胜场球队:{sorted_wins_asc[0]['team_id']}({min_win}场)") print(f"最高胜场球队:{sorted_wins_desc[0]['team_id']}({max_win}场)")
完整代码示例
把所有步骤整合起来,完整代码如下:
import requests import json from operator import itemgetter url = 'api url' response = requests.get(url) data = json.loads(response.content) lookup = ["CARDINALS", "BUFFALO", "DOLPHINS", "COWBOYS"] filtered_teams = [team for team in data if team["team_id"] in lookup] # 按胜场升序、降序排序 sorted_wins_asc = sorted(filtered_teams, key=itemgetter('wins')) sorted_wins_desc = sorted(filtered_teams, key=itemgetter('wins'), reverse=True) # 提取胜场数值列表 win_values = [team["wins"] for team in filtered_teams] wins_asc = sorted(win_values) wins_desc = sorted(win_values, reverse=True) # 计算百分比变化 min_win = wins_asc[0] max_win = wins_desc[0] if min_win == 0: print("最低胜场为0,无法计算百分比变化") else: percentage_change = ((max_win - min_win) / min_win) * 100 print("指定球队胜场数据:") for team in filtered_teams: print(f"{team['team_id']}: {team['wins']}胜") print("\n排序结果:") print(f"升序:{[t['team_id'] for t in sorted_wins_asc]}") print(f"降序:{[t['team_id'] for t in sorted_wins_desc]}") print(f"\n最高胜场与最低胜场的百分比变化:{percentage_change:.2f}%") print(f"最低胜场:{sorted_wins_asc[0]['team_id']}({min_win}场)") print(f"最高胜场:{sorted_wins_desc[0]['team_id']}({max_win}场)")
运行结果(基于你提供的测试数据)
根据你给出的API返回数据,运行后会输出:
指定球队胜场数据: CARDINALS: 14胜 BUFFALO: 16胜 COWBOYS: 21胜 DOLPHINS: 22胜 排序结果: 升序:['CARDINALS', 'BUFFALO', 'COWBOYS', 'DOLPHINS'] 降序:['DOLPHINS', 'COWBOYS', 'BUFFALO', 'CARDINALS'] 最高胜场与最低胜场的百分比变化:57.14% 最低胜场:CARDINALS(14场) 最高胜场:DOLPHINS(22场)
内容的提问来源于stack exchange,提问作者Jr David
相关产品推荐
相关产品推荐

