最小和最大函数返回不正确的值

时间:2014-11-05 16:06:44

标签: python python-2.7 iteration text-files

我使用python 2.7在文本文件中查找最高和最低值。

文本文件的格式简单,每行都有一个Integer值。 以下代码从文件中收集数字:

with open(data_file, 'r') as f:
    data_list = f.readlines()

然后我尝试用:

达到最大值和最小值
max_value =  max(data_list)
min_value = min(data_list)
print('Max value: '+ str(max_value) + ' Min value: ' + str(min_value))

然后我从印刷品中得到的是: 最大值:8974  最低价值:11239

最大值如何大于最小值?我也尝试打印整个列表,并且有比上述更高和更低的值。在文本文件中,还有比上述更高和更低的值。

我觉得我对python的理解可能存在根本性的错误,请帮助我找出我的误解。

1 个答案:

答案 0 :(得分:10)

当您从文件中读取时,您的列表将充满字符串。您需要将这些转换为整数/浮点数,否则max/min将不会返回max/min 数字值。下面的代码会使用list comprehensiondata_list中的每个值转换为整数,然后返回最大值。

max_value = max([int(i) for i in data_list])

您可以在事实之前执行此操作,因此您无需再次为min转换它:

with open(data_file, 'r') as f:
    data_list = [int(i) for i in f.readlines()]

max_value =  max(data_list)
min_value = min(data_list)

注意:如果你有花车,那么你应该在列表理解中使用float而不是int

顺便说一下,这对字符串不起作用的原因是max将比较字符串的序数值,从字符串的开头开始。在这种情况下,'8'大于'1'。