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”2”
?如果要比较包含数字的字符串,需要先将其转换为数字,否则结果可能不正确。例如,使用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
。您的代码仍然有效,我只是认为澄清该位是一个好主意。