Python 排名不正确

Python 排名不正确,python,Python,我通过得分、分钟数、罚球和效率排名NBA前十名篮球运动员。然而,当我去打印排名时,排名是不正确的。它似乎是根据数字中每个字符的值对它们进行排序,但我希望它们按照前面提到的值中的最高值到最低值进行排序 我的代码: def readData(filename): inputFile = open(filename, 'r') inputFile.readline() master_data_list = [] for line in inputFile:

我通过得分、分钟数、罚球和效率排名NBA前十名篮球运动员。然而,当我去打印排名时,排名是不正确的。它似乎是根据数字中每个字符的值对它们进行排序,但我希望它们按照前面提到的值中的最高值到最低值进行排序

我的代码:

def readData(filename):

    inputFile = open(filename, 'r')

    inputFile.readline()

    master_data_list = []

    for line in inputFile:
        master_data_list.append(line.split(","))

    return master_data_list

def points(master_data_list):

    pointList = []

    for player in master_data_list[:-3]:
        index = (player[1], player[2], player[6])
        pointList.append(index)

    return pointList

def minutes(master_data_list):

    minutesList = []

    for player in master_data_list[:-3]:
        index = (player[1], player[2], player[5])
        minutesList.append(index)

    return minutesList

def freethrows(master_data_list):

    freethrowsList = []

    for player in master_data_list[:-3]:
        index = (player[1], player[2], player[18])
        freethrowsList.append(index)

    return freethrowsList

def efficiency(master_data_list):

    effList = []

    for player in master_data_list:
        formula = int(((player[6] + player[9] + player[10] + player[11] + player[12])-((player[15] - player[16]) + (player[17] - player[18]) + player[13]))/(player[4]))
        index = (player[1], player[2], formula)
        effList.append(formula)

    return effList

def main():

    master_data_list = readData("player_career.csv")

    pointList = points(master_data_list)
    minutesList = minutes(master_data_list)
    freethrowsList = freethrows(master_data_list)
    #effList = efficiency(master_data_list)

    #got this code from 
    pointList = sorted(pointList, key = lambda x: x[2], reverse = True)
    minutesList = sorted(minutesList, key = lambda x: x[2], reverse = True)
    freethrowsList = sorted(freethrowsList, key = lambda x: x[2], reverse = True)
    #effList = sorted(effList, key = lambda x: x[2], reverse = True)

    print("Top 10 players based on total points scored.")
    for line in pointList[:10]:
        print(line[0], line[1]+"-"+line[2])
    print()

    print("Top 10 players based on total minutes.")
    for line in minutesList[:10]:
        print(line[0], line[1]+"-"+line[2])
    print()

    print("Top 10 players based on total free throws.")
    for line in freethrowsList[:10]:
        print(line[0], line[1]+"-"+line[2])
    print()

    """
    print("Top 10 players based on total efficiency.")
    for line in effList[:10]:
        print(line[0], line[1]+"-"+line[2])
    print()
    """
代码的输出:

根据总分排名前十的球员。
Terrell Brandon-9994
Rony Seikaly-9991
大卫·沃恩-998
巴迪珍妮特-997
Irv Torgoff-997
格雷格·巴拉德-9953
拉尔夫·辛普森-9953
约翰·卢卡斯-9951
Don Kojis-9948
菲尔·切尼尔-9931

根据总分钟数排名前十的球员。
弗雷德·霍贝格-9976
查理·约翰逊-9972
Stewart Granger-996
加里·格雷戈-996
基思·博甘斯-9957
Al Wood-9939
肯尼·盖蒂森-9930
威利斯·贝内特-993
Jack Molinas-993
科里·布朗特-9925

根据罚球总数排名前十的球员。
Kurt Rambis-999
查理·斯科特-998
沃尔特·韦斯利-998
阿尔伯特·金-996
卢修斯哈里斯-994
约翰尼·诺依曼-991
弗兰克·约翰逊-990
玛迪·柯林斯-99
卡尔文·加勒特-99
鲍勃·拉基-99

我还没有做效率测试,所以没有包括在内

以下是输入文件的示例:


如果有人想让他们正确排列,谢谢。

您需要将输入中的字符串更改为整数,如:

def points(master_data_list):

    pointList = []

    for player in master_data_list[:-3]:
        index = (player[1], player[2], int(player[6]))
        pointList.append(index)

    return pointList

请将此
key=lambda x:x[2]
更改为
key=lambda x:int(x[2])
以比较整数,而不是字符串。

您的点是否存储为字符串的整数?在我看来,它们是字符串,所以按字母顺序排序。你能发布一个输入文件内容的样本吗?有了这个,我得到了一个错误:print(第[0]行,[1]+“-”+行[2])TypeError:只能将str(而不是“int”)连接到strNow,将
行[2]
更改为
str(第[2]行]
。由@lenik给出的答案更好。