带负小数的PYTHON问题

带负小数的PYTHON问题,python,list,floating-point,max,min,Python,List,Floating Point,Max,Min,我有一个负浮动列表。我想用它们做一个柱状图。据我所知,Python不能对负数进行操作。这是正确的吗?该列表类似于[-0.2923998,-1.2394875,-0.23086493,等等]。我试图找出最大值和最小值,这样我就能知道范围是多少。我的代码出现错误: setrange = float(maxv) - float(minv) TypeError: float() argument must be a string or a number 这是代码: f = open('clusters

我有一个负浮动列表。我想用它们做一个柱状图。据我所知,Python不能对负数进行操作。这是正确的吗?该列表类似于[-0.2923998,-1.2394875,-0.23086493,等等]。我试图找出最大值和最小值,这样我就能知道范围是多少。我的代码出现错误:

setrange = float(maxv) - float(minv)
TypeError: float() argument must be a string or a number
这是代码:

f = open('clusters_scores.out','r')
#first, extract all of the sim values
val = []
for line in f:
    lineval = line.split()
    print lineval
    val.append(lineval)
print val
#val = map(float,val)
maxv = max(val)
minv = min(val)
setrange = float(maxv) - float(minv)
“val”列表中的所有值都是负小数。错误指的是什么,如何修复

输入文件如下所示:

-0.0783532095182 -0.99415440702 -0.692972552716 -0.639273674023 -0.733029194040.765257900121 -0.755438339963
-0.144140594077 -1.06533353638 -0.366278118372 -0.746931508538 -1.02549039392 -0.296715961215
-0.0915937502791 -1.68680560936 -0.955147543358
-0.0488457137771 -0.0943080192383 -0.747534412969 -1.00491121699
-1.43973471463
-0.0642611118901 -0.0910684525497
-1.19327387414 -0.0794696449245
-1.00791366035 -0.0509749096549
-1.08046507281 -0.957339914505 -0.861495748259
split()
的结果是一个分割值列表,这可能就是您得到该错误的原因

例如,如果执行
'-0.2'.split()
,则返回一个具有单个值的列表
['-0.2']

编辑:啊哈!提供输入文件后,问题似乎出在这里:
-0.733029194040.765257900121
。我想你是想做两个分开的彩车

假设已更正的文件如下所示:

-0.0783532095182 -0.99415440702 -0.692972552716 -0.639273674023 -0.733029194040 -0.765257900121 -0.755438339963
-0.144140594077 -1.06533353638 -0.366278118372 -0.746931508538 -1.02549039392 -0.296715961215
-0.0915937502791 -1.68680560936 -0.955147543358
-0.0488457137771 -0.0943080192383 -0.747534412969 -1.00491121699
-1.43973471463
-0.0642611118901 -0.0910684525497
-1.19327387414 -0.0794696449245
-1.00791366035 -0.0509749096549
-1.08046507281 -0.957339914505 -0.861495748259
以下代码将不再引发该异常:

f = open('clusters_scores.out','r')
#first, extract all of the sim values
val = []
for line in f:
    linevals = line.split()
    print linevals
    val += linevals
print val
val = map(float, val)
maxv = max(val)
minv = min(val)
setrange = float(maxv) - float(minv)
我已将其更改为从split()获取列表结果并将其连接到列表,而不是附加它,只要文件中有有效的输入,

split()的结果是一个拆分值列表,这可能就是您出现该错误的原因

例如,如果执行
'-0.2'.split()
,则返回一个具有单个值的列表
['-0.2']

编辑:啊哈!提供输入文件后,问题似乎出在这里:
-0.733029194040.765257900121
。我想你是想做两个分开的彩车

假设已更正的文件如下所示:

-0.0783532095182 -0.99415440702 -0.692972552716 -0.639273674023 -0.733029194040 -0.765257900121 -0.755438339963
-0.144140594077 -1.06533353638 -0.366278118372 -0.746931508538 -1.02549039392 -0.296715961215
-0.0915937502791 -1.68680560936 -0.955147543358
-0.0488457137771 -0.0943080192383 -0.747534412969 -1.00491121699
-1.43973471463
-0.0642611118901 -0.0910684525497
-1.19327387414 -0.0794696449245
-1.00791366035 -0.0509749096549
-1.08046507281 -0.957339914505 -0.861495748259
以下代码将不再引发该异常:

f = open('clusters_scores.out','r')
#first, extract all of the sim values
val = []
for line in f:
    linevals = line.split()
    print linevals
    val += linevals
print val
val = map(float, val)
maxv = max(val)
minv = min(val)
setrange = float(maxv) - float(minv)
我将其更改为从split()获取列表结果并将其连接到列表,而不是附加它,只要文件中有有效的输入,这将起作用

“val”列表中的所有值都是负小数

不,他们不是;它们是表示负小数的字符串列表,因为
.split()
调用会生成一个列表
maxv
minv
是字符串列表,不能将其馈送到
float()

错误指的是什么,如何修复

它指的是
val
的内容不是您所认为的内容。调试的第一步是验证您的假设。如果您在REPL处尝试此代码,那么您可以检查
maxv
minv
的内容,并注意到您有字符串列表,而不是预期的字符串

我假设您希望将所有字符串列表(来自文件的每一行)放在一个字符串列表中。使用
val.extend(lineval)
而不是
val.append(lineval)

也就是说,在调用
max
min
之前,您仍然希望
将字符串映射成浮点,因为否则您将把字符串作为字符串而不是浮点进行比较。(这可能很有效,但显式比隐式好。)

更简单的是,只需一次读取整个文件并将其拆分
.split()
不带参数时,在空白处拆分,换行符为空白。你也可以在阅读的同一点进行
map
ping操作,仔细应用列表理解。我会写:

with open('clusters_scores.out') as f:
  val = [float(x) for x in f.read().split()]
result = max(val) - min(val)
“val”列表中的所有值都是负小数

不,他们不是;它们是表示负小数的字符串列表,因为
.split()
调用会生成一个列表
maxv
minv
是字符串列表,不能将其馈送到
float()

错误指的是什么,如何修复

它指的是
val
的内容不是您所认为的内容。调试的第一步是验证您的假设。如果您在REPL处尝试此代码,那么您可以检查
maxv
minv
的内容,并注意到您有字符串列表,而不是预期的字符串

我假设您希望将所有字符串列表(来自文件的每一行)放在一个字符串列表中。使用
val.extend(lineval)
而不是
val.append(lineval)

也就是说,在调用
max
min
之前,您仍然希望
将字符串映射成浮点,因为否则您将把字符串作为字符串而不是浮点进行比较。(这可能很有效,但显式比隐式好。)

更简单的是,只需一次读取整个文件并将其拆分
.split()
不带参数时,在空白处拆分,换行符为空白。你也可以在阅读的同一点进行
map
ping操作,仔细应用列表理解。我会写:

with open('clusters_scores.out') as f:
  val = [float(x) for x in f.read().split()]
result = max(val) - min(val)

Python中的负数没有问题。我已经对我的答案进行了大量编辑,以说明示例输入文件中的新信息。“Python不能使用负数进行操作”!!令人震惊的是,有些人会得出结论,这是他们问题的根源…总有一天,那些Python开发人员会解决这个讨厌的负数问题!!!(虽然这只影响不到所有数字的一半)Python中的负数没有问题。我对答案进行了大量编辑,以说明示例输入文件中的新信息。“Python不能使用负数进行操作”!!令人震惊的是,有些人会得出结论,这是他们问题的根源…总有一天,那些Python开发人员会解决这个讨厌的负数问题!!!(虽然这只影响不到所有数字的一半)
split
提供字符串数组,因此必须将它们转换为floatsBut wh