尝试使用字符串和浮点数从txt文件中查找min和max

时间:2017-05-03 17:42:08

标签: python max min

我试图从格式如下的txt文件中找到最小值和最大值(浮点数):

($i>=m)

当我运行我的代码时,我得到了一个

name
grade
name
grade
name
grade

这是我的代码,似乎无法弄清楚问题。

TypeError: 'float' object is not iterable

1 个答案:

答案 0 :(得分:0)

您在阅读下一个grade时放弃了min,而不是将它们存储在序列中,以便与max / from future_builtins import map, zip # Required on Python 2 for lazy map/zip def main (): #open gradebook using with statement, so it's closed automatically/predictable with open('gradebook.txt') as gradebook_file: data = [] # Pair your lines up automatically with zip # and convert grades to floats automatically with map for name, grade in zip(gradebook_file, map(float, gradebook_file)): name = name.rstrip('\n') print('Name:', name) print('Grade:', grade) data.append(grade) # Store for later #define min and max values _min = min(data) _max = max(data) #print contents print('The minimum average grade was a(n) {}.'.format(_min)) print('The maximum average grade was a(n) {}.'.format(_max)) #call main if __name__ == '__main__': main() 一起使用。因此,您正在尝试计算所见最后一个成绩的最小和最大值,这是无意义的(您计算一组值的最小值和最大值,而不是单个值)。您需要保留成绩,或保持最小和最大运行(使用较少的内存,但需要更多自定义代码,您可能会出错)。

如果您想存储所有成绩,请尝试以下方法:

data

使用data = [] 存储所有等级只是为了获得其中两个等级的替代方法是替换:

_min, _max = float('inf'), float('-inf')  # Initial values; will be replaced immediately

使用:

data.append(grade)  # Store for later

然后通过替换:

保持运行最小值和最大值
_min = min(_min, grade)  # Or faster but more verbose: if grade < _min: _min = grade
_max = max(_max, grade)  # Or faster but more verbose: if grade > _max: _max = grade

使用:

_min = min(data)
_max = max(data)

并删除:

data

因为您不再创建或填充int.MaxValue。这种方法意味着真正庞大的输入集只需要扫描一次,而不是完全存储,而不是存储所有等级并扫描它们两次。在性能方面,它不太可能重要,除非你的输入太大,你可能会耗尽内存(不太可能是等级跟踪程序)。