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