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

MoS*_*CoW 3 python iteration text-files python-2.7

我使用python 2.7来查找文本文件中的最高和最低值.

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

with open(data_file, 'r') as f:
    data_list = f.readlines()
Run Code Online (Sandbox Code Playgroud)

然后我尝试达到最大值和最小值:

max_value =  max(data_list)
min_value = min(data_list)
print('Max value: '+ str(max_value) + ' Min value: ' + str(min_value))
Run Code Online (Sandbox Code Playgroud)

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

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

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

Ffi*_*ydd 10

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

max_value = max([int(i) for i in data_list])
Run Code Online (Sandbox Code Playgroud)

您可以在事实之前执行此操作,因此您无需再次转换它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)
Run Code Online (Sandbox Code Playgroud)

注意:如果你有浮动,那么你应该使用float而不是int列表理解.

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