2013-11-28 167 views
0

我寫了下面的功能:把字符串列表轉換成浮動(蟒蛇)的列表

def read_coordinates(filename): 
    invoerfile = open(filename) 
    lines = invoerfile.readlines() 
    for line in lines: 
     seperate_coordinate_rows = line.split("=") 
     for seperate_coordinate_row in seperate_coordinate_rows: 
      row = seperate_coordinate_row.split() 
      print row 

這給了我這些列表:

['5,4', '4,5', '8,7'] 
['6,3', '3,2', '9,6', '4,3'] 
['7,6'] 
['9,8'] 
['5,5', '7,8', '6,5', '6,4'] 

什麼我需要添加到這個功能獲取帶有浮點數的列表作爲輸出?

+0

你能發表一個輸入的例子嗎? –

+0

如果您發佈了您的輸入樣本,這裏的某個人可能會想出比這更好的解決方案。 –

+0

而不是'['7,6']',它應該是'[7.6]'。這是你想要的嗎?還是應該是'[7,6]'? – Sudipta

回答

4

返回一個列表你可以這樣使用:

row = map(lambda x: float(x.replace(',','.')), row) 

以上將返回Python 3.x中的一個生成器,它可能會或可能不適合您的需求。如果你需要一個實際的列表,你有兩種選擇:

# Convert the generator to a list (bad option) 
row = list(row) 

# Or use a list comprehension 
row = [float(x.replace(',','.')) for x in row] 
+0

這將在Python 3.x中返回一個生成器。 –

+3

爲什麼不在這裏使用列表理解? '[float(x.replace(',','。'))for x in row]'。它會比'map'(沒有堆棧推送)更快,並且在Python 2和Python 3中都是相同的。 –

+0

修正了它,儘管我不認爲OP使用Python 3.x,他也不會在意關於使用listcomp vs maps的性能提升很小。 –

0

把這個放在你的inner for循環中。

row = [float(x.replace(',', '.') for x in row] 
0

地圖你的價值觀,以float()

row = map(float, seperate_coordinate_row.replace(',', '.').split()) 

map()呼籲在第二個值每個值的第一個參數,有效地返回浮點值的列表。

這裏需要.replace()將您的格式轉換爲float()可識別的格式。

演示:

>>> line = '5,4 4,5 8,7' 
>>> map(float, line.replace(',', '.').split()) 
[5.4, 4.5, 8.7] 

如果您正在使用Python 3,或者只是想反正用一個列表理解,使用:

[float(item.replace(',', '.') for item in seperate_coordinate_row.split()] 

這裏.replace()應用於每個拆分項目來代替。

+0

你首先需要用「。」替換「,」。 – jazzpi

+0

我們不應該使用'locales'來處理這些數據嗎? – thefourtheye

0

要確保你得到一個列表,最好使用列表理解,因爲map不Python3

row = [float(x.replace(",", ".")) for x in seperate_coordinate_row.split()] 
0

替換最後兩行

row = [float(item.replace(',', '.')) for item in seperate_coordinate_row.split()] 
print row