Sorting 排序一些代码,我需要缩短它

Sorting 排序一些代码,我需要缩短它,sorting,python-3.x,Sorting,Python 3.x,对,所以我修改了代码,这样它只做平均值,但当我运行它时,它不会停止,任何人都可以帮助我。 谢谢 我需要帮助缩短这段代码,因为它太长了。我还需要对其他三个类执行此操作,我不希望它是一行代码,我只是想知道它是否可以缩短 谢谢以下是我认为您想要的: fd = open('Class1.txt') lines = [line.strip() for line in fd] s = {} for line in lines: splitted = [i for i in line.

对,所以我修改了代码,这样它只做平均值,但当我运行它时,它不会停止,任何人都可以帮助我。 谢谢

我需要帮助缩短这段代码,因为它太长了。我还需要对其他三个类执行此操作,我不希望它是一行代码,我只是想知道它是否可以缩短


谢谢

以下是我认为您想要的:

  fd = open('Class1.txt')
  lines = [line.strip() for line in fd]
  s = {}
  for line in lines:
    splitted = [i for i in line.split(',')]
    key = splitted[0]
    s[key] = [int(n) for n in splitted[1:]]
  def average():
          avg_mark = lambda name:sum(s[name])/len(s[name])
          for i in sorted(s.keys(),key=avg_mark,reverse=True):
              print (i,avg_mark(i),"\n")
          average()
          average()
  average()
当然,在现实中,由于在
average
中调用
average
,您将遇到
maxrecursiondepth
问题。因此,如果您真的希望代码能够做到这一点,您不妨这样做:

import csv

with open('Class1.txt') as fd:
    s = {row[0]:[int(n) for n in row[1:]] for row in csv.reader(fd, delimiter=',')}

def average():
    avg_mark = lambda name : sum(s[name])/len(s[name])
    for name in sorted(s, key=avg_mark, reverse=True):
        print(name, avg_mark(name))  # newline prints automatically

请不要使用SO在GCSE考试中作弊。你应该提交你自己的作品,而不是让互联网重写它。你为什么要缩短它?通过递归调用函数重复输入请求是糟糕的设计。为了让它看起来更专业,因为这几乎肯定是关于你的,请务必阅读。
def f(): f()