2012-07-04 52 views
0

我已经开始研究python了,并且试图在小块中掌握新的东西,我为自己设定的最新目标是读取一个单独的浮点文件到内存中,并比较如果差异与用户指定的一样大,则列表并打印值。我写了下面的代码,它至今:Python浮点列表值比较

#! /usr/bin/env python 
value = raw_input('Please enter a mass difference:') 
fh = open ("values"); 
x = [] 
for line in fh.readlines(): 
y = [float for float in line.split()] 
x.append(y) 
fh.close() 
for i in range(0,len(x)-1): 
for j in range(i,len(x)): 
    if x[j][0] - x[i][0] == value: 
    print x[i][0],x[j][0] 

编译器会抱怨,我不容许从。减去字符串(逻辑)的字符串,但我的问题是......他们为什么字符串?不应该嵌套的列表是浮动列表,因为我使用浮动浮动吗?

文字错误:;:

y = [float(i) for i in line.split()] 

TypeError: unsupported operand type(s) for -: 'str' and 'str' 

我将不胜感激,如果在我的推理出错有人能告诉我代替你的列表理解的)

回答

3

试试这个说明

从文件读取的数据是字符串,可将它们转换为其他需要转换的类型。所以在你的情况下,你想通过float() ..你尝试,但不是很正确/成功地将您的值浮动。这应该给你你正在寻找的结果。

如果您有其他的值来转换,这句法将工作:

float_val = float(string_val) 

假设string_val包含有效字符的浮动,它会转换,否则你会得到一个异常。

>>> float('3.5') 
3.5 

>>> float('apple') 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
ValueError: invalid literal for float(): apple 
2

列表理解没有做你认为它正在做的事情。它只是将每个字符串分配给变量float,然后将其返回。相反,你真的想使用其他名称和呼叫浮在上面:

y = [float(x) for x in line.split()] 
+0

干杯解释为什么结果WASN不是我期待的;) –

2

错误1y = [float(x) for x in line.split()]或者干脆map(float,lines.split())

错误2if x[j][0] - x[i][0] == float(value): #you didn't converted value to a float