2011-04-05 41 views
0

我有一個外部文件,它是單個浮點數列(希望能夠將其展開爲將來有多列)。我想將它導入到一個數組中。該文件是一個cvs文件,但它也可以是一個txt文件。我如何在Python中將列表類型轉換爲數值類型

我使用:

reader = csv.reader(open("e=0.6.csv")) 
table = [] 
for row in reader: 
    values = []  
    for col in row: 
     values.append(float(col)) 
    table.aapend(values) 

結果是一個列表[[1.0], [0.98], ......] 我要將列表轉換爲數字(1.0, 0.98, ...) 數組我怎樣才能做到這一點?

回答

0

在特定情況下,我會跳過這一步,只是這樣做:

reader = csv.reader(open("e=0.6.csv")) 

table = [float(col) for col in row for row in reader] 

不過,如果你想與你原來的答案去,你可以這樣做:

使用map method

>>> l = [[1.0], [0.98], [3.0]] 
>>> map(lambda x: x[0], l) 
[1.0, 0.97999999999999998, 3.0] 

或列表理解:

>>> [e for subl in l for e in subl] 
[1.0, 0.97999999999999998, 3.0] 

在這兩種情況下,你可以在列表中只是在做tuple(result)

1

你爲什麼要創建一個名爲值的新列表轉換成返回一個元組?爲什麼不添加到表格呢?即

reader = csv.reader(open("e=0.6.csv")) 
table = [] 
for row in reader: 
    for col in row: 
     table.append(float(col)) 
0
reader = csv.reader(open("e=0.6.csv")) 
table = [] 
for row in reader: 
    for col in row: 
     table.aapend(float(col)) 
1

(1.0, 0.98, ...)是一個元組。下面是實現從一個元組的一種方法:

>>> l = [[1.0], [0.98]] 
>>> tuple(i[0] for i in l) 
(1.0, 0.97999999999999998) 
0

使用列表理解:

>>> l = [[0.1], [0.2], [0.3]] 
>>> [x[0] for x in l] 
[0.1, 0.2, 0.3] 

或者地圖功能:

>>> map(lambda x:x[0], l) 
[0.1, 0.2, 0.3] 

或者精簡函數:

>>> reduce(lambda x,y: x+y, l, []) 
[0.1, 0.2, 0.3] 

或發電機:

>>> (x[0] for x in l) 
<generator object <genexpr> at 0x1004e00f0> 

或者只是將您的號碼直接存儲在列表中。

2
reader = csv.reader(open("e=0.6.csv")) 
table = tuple(float(col) for row in reader for col in row) 
+0

你不需要這裏的方括號:你可以通過一臺發電機表達式作爲唯一的參數'tuple'。 – intuited 2011-04-05 23:07:55

+0

謝謝,很高興知道。 – manji 2011-04-05 23:09:06

0

我不明白你爲什麼在這種情況下使用csv.reader。你自己說過這不是真的csv!只要做到之一:

map(float, open("e=0.6.csv").readlines()) 

[float(x) for x in open("e=0.6.csv").readlines()] 
相關問題