2012-07-04 316 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