Python实现5个代表人物的数值从高到低排名的技术求助
问题解决:数值从高到低排名实现
问题描述
输入5个代表不同人物的数值,将数值从高到低排名(例:数值5对应排名1,数值1对应排名5),以下是尝试的代码但无法实现需求:
number1 = [] number2 = [] number3 = [] number4 = [] number5 = [] count = 0 while count < 1: a = int(input("enter score num 1")) number1.append(a) b = int(input("enter score num 2")) number2.append(b) c = int(input("enter score num 3")) number3.append(c) d = int(input("enter score num 4")) number4.append(d) e = int(input("enter score num 5")) number5.append(e) count += 1 import pandas as pd df = pd.DataFrame(data={ 'names': ['d', 's', 'r', 'l', 'a'], 'match1': [number1, number2, number3, number4, number5], }) df["Rank"] = df["match1"].rank() df["Rank"] = df["match1"].rank(method ='max') df
代码问题分析
- 创建5个独立列表存储单个数值,完全冗余,可合并为一个列表统一管理
- 构建DataFrame时,
match1列传入的是列表而非单个数值,导致rank()方法无法正确计算排名 rank()默认按升序计算(数值越小排名越靠前),未设置降序参数实现高分优先排名- 重复对
Rank列赋值,第二次操作覆盖了第一次结果 - 仅执行一次的
while循环无意义,可直接移除
修正方案(两种实现方式)
方式1:使用pandas实现
import pandas as pd # 输入5个分数 scores = [] names = ['d', 's', 'r', 'l', 'a'] for i in range(5): score = int(input(f"enter score num {i+1}: ")) scores.append(score) # 创建DataFrame df = pd.DataFrame({ 'names': names, 'match1': scores }) # 计算排名:ascending=False实现降序(高分排第1),method='max'处理同分情况 df['Rank'] = df['match1'].rank(method='max', ascending=False).astype(int) # 按排名排序展示结果 print(df.sort_values('Rank'))
方式2:基础Python实现(无需pandas)
names = ['d', 's', 'r', 'l', 'a'] scores = [] # 输入分数 for i in range(5): score = int(input(f"enter score num {i+1}: ")) scores.append(score) # 按分数降序排序,生成带名字和分数的排名列表 ranked = sorted(zip(names, scores), key=lambda x: x[1], reverse=True) # 输出排名结果 print("排名结果:") for idx, (name, score) in enumerate(ranked, start=1): print(f"排名{idx}:{name},分数{score}")
内容的提问来源于stack exchange,提问作者nikola mitrovic
相关产品推荐
相关产品推荐

