【问题标题】:Split a list that's in a file拆分文件中的列表
【发布时间】:2015-09-21 01:16:31
【问题描述】:

所以我有一个多行的文本文件 每行都有姓名、年级、出生年份或学生,用分号隔开

如何创建一个函数,以便对每行中的所有第二项求和,然后求平均值?

例如,

mary; 0; 1995
jay; 50; 1995

classAverage = 25

真的很困惑。

到目前为止,这是我的代码,它没有给我错误,但是当我打印它时显示<function classAverage at 0x0000000004C1ADD8>

from kiva.constants import LINES

def process(name):
    f = open(name)
    answer = []
    for line in f:
        answer.append(line.strip())
    return answer
def classAverage(data):
    data = process(filename)
    data.split()
    adding = []
    for line in data:
        adding = adding + data[1]
    return adding/(line)


if __name__ == '__main__':
    filename = "grades.txt"
    data = process(filename)
    for each in data:
        print each
    print classAverage(data)
    #print "Average grade is ", classAverage(data)
    year1 = 1995
    year2 = 1997
    print "Number born from ",year1,"to",year2,"is",
    #print howManyInRange(data, year1, year2)

【问题讨论】:

    标签: python list split average


    【解决方案1】:
    def ave(x):
        return sum(x) / len(x)
    with open(name, newline='') as csvfile:
        print(ave([float(row[1]) for row in csv.reader(csvfile, dilimeter=';')]))
    

    【讨论】:

      【解决方案2】:

      运行该代码时出现错误,但如果您使用“print classAverage”而不是“print classAverage(data)”,您将获得该输出,因此您复制的版本可能与产生该输出的版本略有不同。

      您的代码中有几个问题。首先是数据是一个列表,而您正在尝试调用 data.split()。你也永远不会用“;”分割文本你的平均公式是关闭的。我做了一些细微的调整,让它按照我的想法去做:

      def process(name):
      f = open(name)
      answer = []
      for line in f:
          answer.append(line.strip().split(';'))
      return answer
      
      
      def classAverage(data):
          adding = 0.0
          for line in data:
              adding = adding + float(line[1])
          return adding / len(data)
      
      
      if __name__ == '__main__':
          filename = "grades.txt"
          data = process(filename)
          for each in data:
              print each
          print classAverage(data)
          # print "Average grade is ", classAverage(data)
          year1 = 1995
          year2 = 1997
          print "Number born from ", year1, "to", year2, "is",
          # print howManyInRange(data, year1, year2)
      

      也就是说,pandas 非常擅长解析数据文件,然后根据数据计算指标。使用 pandas 解析文件是一行。以下是使用 pandas 的等效代码:

      import pandas as pd
      
      
      if __name__ == '__main__':
          df = pd.read_table('grades.txt', sep=';', names=['name', 'score', 'year'])
          print 'Average score = ', df.score.mean()
          year1 = 1995
          year2 = 1997
          print "Number born from ", year1, "to", year2, "is", df[(df.year >= year1) & (df.year <= year2)].name.count()
      

      输出:

      Average score =  25.0
      Number born from  1995 to 1997 is 2
      

      【讨论】:

        【解决方案3】:

        你应该像这样修改函数 classAverage:

        def classAverage(data):
            # you do not need to re-process the file, just use the data
            adding = []
            for line in data:
                line = line.split(';')
                adding.append(float(line[1].strip()))
            return sum(adding) / len(adding)
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-03-10
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多