如何在python中对文本文件进行排序?

时间:2015-04-20 10:00:23

标签: python sorting

我有一个文本文件,每个学生包含3个分数。

"Elizabeth, 2, 7, 3, Anna, 9, 6, 4, Jenny, 8, 1, 5, Victoria,  1, 4, 6"

我需要导入这些结果并用逗号分隔。我还需要按照以下方式对它们进行排序:

  

平均得分,从最高到最低

     

按字母顺序显示每位学生的高分

     

得分最高得分

任何人都可以帮助我吗?

这是我到目前为止所做的,但我不确定这是正确的方法:

Class1 = " Jenny, 8, 1, 5, Elizabeth, 2, 7, 3,  Anna,  9, 6, 4 , Victoria,  1, 4, 6"

Listofresults = Class1.split(",")

print (Listofresults)

1 个答案:

答案 0 :(得分:1)

我不会为你编写整个程序,但这应该让你开始。它显示了一种分割和存储输入数据的方法,它显示了一些对它进行排序的方法。我会让你弄清楚如何以所要求的确切格式打印数据。

class1 = " Jenny, 8, 1, 5, Elizabeth, 2, 7, 3,  Anna,  9, 6, 4 , Victoria,  1, 4, 6"

#Split on commas and then remove leading and trail spaces
data = [word.strip() for word in class1.split(",")]
print('Input:  ', data)

student_scores = []
for i in range(0, len(data), 4):
    #Get next name & 3 scores 
    name, scores = data[i], data[i+1:i+4]
    #Convert scores in list from string to int
    scores = [int(s) for s in scores]
    #Save the name and scores, with the scores sorted from high to low
    student_scores.append((name, sorted(scores, reverse=True)))

print('Alpha:  ', sorted(student_scores))

def mean_score(student):
    scores = student[1]
    return sum(scores) / len(scores)

print('Average:', sorted(student_scores, key=mean_score, reverse=True))

<强>输出

Input:   ['Jenny', '8', '1', '5', 'Elizabeth', '2', '7', '3', 'Anna', '9', '6', '4', 'Victoria', '1', '4', '6']
Alpha:   [('Anna', [9, 6, 4]), ('Elizabeth', [7, 3, 2]), ('Jenny', [8, 5, 1]), ('Victoria', [6, 4, 1])]
Average: [('Anna', [9, 6, 4]), ('Jenny', [8, 5, 1]), ('Elizabeth', [7, 3, 2]), ('Victoria', [6, 4, 1])]

我认为这个程序中最棘手的部分是最后的sorted()调用,我使用mean_score函数作为关键函数。如果您已阅读我链接的文档应该有意义,但如果您需要进一步说明,请告诉我。