Python 最小值为空

Python Minimum is blank

f = open("data.txt", "r")
lines = f.read().split('\n')
a= max(lines)
print a
f.close()

上面的代码从我的数据文件中获取了最大值,但是当我尝试时:

f = open("data.txt", "r")
lines = f.read().split('\n')
a= min(lines)
print a
f.close()

我得到一个空白return,好像文件中的最小值是一个空白space。为什么是这样?我怎样才能获得最低阅读量?

文件看起来像这样

1
2
3
4
5

第一个猜测可能是您的文件实际上在末尾有一个 empty/blank 行,这将导致 "minimum" 为空白。

但是,即使文件中 没有 无关的换行符,您仍然会遇到问题。

如果您使用换行符作为分隔符拆分流 AA\nBB\nCC\n(普通文件),最后的换行符将为您提供一个空元素,与在逗号上拆分 AA,BB,CC, 的方式相同:

['AA','BB','CC','']

换句话说,在最后一个分隔符之后有一个字段。

有几种方法可以解决这个问题,例如使用:

lines = f.read().split('\n')[:-1]

或者,或者:

a = min(lines[:-1])

如果你知道最后的换行符会在那里(通常应该用于普通文本文件)。

如果你想处理文件可能不一定有一个终止换行符并且也可能为空的情况,你可以改用这个:

lines = f.read().split('\n')
if len(lines) == 0:
    minline = "" # or None if you prefer
else:
    if lines[-1] == '':
        lines = lines[:-1]
    minline = min(lines)
# Use minline here

最后一点,min/max 提供字典排序,将数字 1 到 10 排序为:

1,10.2.3.4.5.6.7.8.9

如果你想要数字排序(并且你知道所有行都有有效数字),使用:

min(mylist,key=int)

我建议您像下面这样更改代码。

f = open("file", "r")
print(min((i for i in f.read().split('\n') if i), key=float))
f.close()

执行:

$ cat file
0.5
1
2
3
4
5
10.1
10.2
$ python3 file.py
0.5

这是因为您的文件中有空行。要丢弃这些值,请使用生成器表达式或列表理解

f = open("data.txt", "r")
lines = f.readlines()
if lines:
    a = min(int(line) for line in lines if line.strip())
    print a
f.close()

出现上述错误是因为\n...你可以试试这个

with open("file.txt") as f: 
    print(min(int(i) for i in f if i.strip()))

它是一个生成器exp加上一个函数cal ...虽然复杂,但体积更小