Python最小值为空

Python最小值为空,python,minimum,Python,Minimum,上面的代码从数据文件中获取最大值,但当我尝试时: 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.clo

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

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()

第一个猜测可能是,您的文件末尾实际上有一个空/空行,这将导致“最小值”为空

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

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

1
2
3
4
5
换句话说,在最后一个分隔符后面有一个空字段

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

['AA','BB','CC','']
或者,或者:

lines = f.read().split('\n')[:-1]
如果您知道最后的换行符将在那里(对于普通文本文件通常应该是这样)

如果要处理文件不一定有终止换行符且可能为空的情况,可以使用此选项:

a = min(lines[:-1])
最后,请注意,
min/max
提供了字典排序,它将数字1到10进行排序,包括:

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
如果需要数字排序(并且您知道所有行都有有效的数字),请使用:


第一个猜测可能是,您的文件末尾实际上有一个空/空行,这将导致“最小值”为空

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

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

1
2
3
4
5
换句话说,在最后一个分隔符后面有一个空字段

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

['AA','BB','CC','']
或者,或者:

lines = f.read().split('\n')[:-1]
如果您知道最后的换行符将在那里(对于普通文本文件通常应该是这样)

如果要处理文件不一定有终止换行符且可能为空的情况,可以使用此选项:

a = min(lines[:-1])
最后,请注意,
min/max
提供了字典排序,它将数字1到10进行排序,包括:

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(mylist,key=int)
执行:

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

我建议您更改代码,如下所示

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

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

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

上述错误是由于
\n
。。。你可以试试这个

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()

它是一个与函数计算耦合的生成器exp。。。虽然很复杂,但它的尺寸较小

上述错误是由于
\n
。。。你可以试试这个

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()

它是一个与函数计算耦合的生成器exp。。。虽然复杂,但尺寸较小

您知道吗
“10”
?如果要比较包含数字的字符串,需要先将其转换为数字,否则结果可能不正确。例如,使用
a=max(lines,key=int)
。您知道
“10”<“2”
?如果要比较包含数字的字符串,需要先将其转换为数字,否则结果可能不正确。例如,使用
a=max(lines,key=int)
。否。应该是
min(如果i.strip(),则i中的i为int(i))
@dawg它工作得很好。谢谢(我很想称你为
Yo!dawg
。:(..)请注意
bool(“”)
是正确的,但是
bool(“”.strip())
是错误的。这是最好的方法,它还可以避免使用
.readlines()
号将整个文件加载到内存中。应该是
min(int(I)for I in f if I.strip())
@dawg它工作得很好。谢谢。。。(我很想称你为
Yo!dawg
。:(..)请注意
bool(“”)是真的,但是
bool(“”.strip())
是假的。这是最好的方法,它还避免了使用
.readlines()
将整个文件加载到内存中,不需要将整个文件加载到内存中(
f.read()
)只需查找
min
项,无需将整个文件加载到内存中(
f.read()
)只是为了找到
min
项实际上,它本身并不是文件中的一个空行,更像是在换行符上拆分的一个人工制品,这意味着文件中最后一个换行符之后将有空数据,即使是没有空行的文件,如
a\nB\nC\n
。您的代码仍然有效,我只是认为澄清一下这一点是个好主意位。实际上,它本身并不是文件中的一个空行,更像是在换行符上拆分的一个人工制品,这意味着文件中最后一个换行符之后将有空数据,即使是没有空行的文件,如
a\nB\nC\n
。您的代码仍然有效,我只是认为澄清该位是一个好主意。