2015-12-02 81 views
1

我在Python的工作,目前我有一個看起來像列表轉換串間隔出號到數組

['001 2.4600  0.46 2.36E+003 86.66 16.77  0.33 1.32E+003 74.41 17.61  0.40 2.21E+003 87.39 22.07', 
'002 10.310  0.38 2.95E+002 76.88 4.53  0000 000000000 00000 0000  0.34 2.62E+002 97.36 4.41', 
'003 74.840  0.63 5.07E+002 64.63 4.03  0.57 4.15E+002 61.96 3.99  0.63 5.43E+002 64.67 5.16', 
... 

等,具有相當多的更多的元素。列表中的每個元素都是一個字符串,其中包含各個圖形之間有空格的字符。即如上所述,第一個元素具有001,2.4600,0.46等等。

問題是我想將列表中的每個元素轉換爲數組的一行。目標是讓一個大型數組給我所有的信息,這些信息目前只是由列表中的字符串中的空格分隔。

我敢肯定,我可以使用內置的數組模塊來做到這一點,但我只是不知道如何。

任何想法?希望問題清楚。

回答

2

您使用array模塊的想法可能是假的,作爲一個array.array對象is, essentially, a list with constrained data type。你不能對它們使用矢量化操作。此外,array.array是一維對象。

也就是說,您可能想要使用numpy module,其中的array對象是一個多維數組,您可以根據自己的意願進行操作。

# idiomatic manner of importing numpy 
import numpy as np 

data = ['1 2 3.', '4. 5 8'] 
arraydata = np.array([[float(n) for n in row.split()] for row in data]) 
print arraydata 

# [[ 1. 2. 3.] 
# [ 4. 5. 8.]] 
+0

這似乎工作得很好。唯一的一個小問題是,當我做相當於「print arraydata」時,它會打印2個單獨的數組(我想要),但是它們都有4行和4列,而不是1行和14列。 –

+0

我想你錯誤地認爲數組的內部表示方式(每行4個數字)與數據的內部表示形式(14行元素組織在一起)。你可以通過打印數組中的單個條目來檢查我的意思,比如'print arraydata [1,11]'給出了'260.0',即第二行中的第12個元素(記住,Python從零開始計數,尋址二維數組時的第一個元素是行數)。 – gboffi

1

希望我的理解正確

res = [] 
for row in my_list: 
    res.append(list(map(float, row.split()))) 

在這裏,您將有值的矩陣,字符串格式。新增轉換

+0

我不認爲'split('')'會起作用。看起來OP的字符串有多個空格,或者製表符而不是空格。相反,只需使用split()分割任何空白字符即可。此外,你可以使這個列表理解:'res = [x.split()for x in]' –

+0

同意,我會修改它 –

3

假設你想在列表的最後名單的花車,試試這個:

>>> data = ['001 2.4600 0.46 2.36E+003 86.66 16.77 0.33 1.32E+003 74.41 17.61 0.40 2.21E+003 87.39 22.07', '002 10.310 0.38 2.95E+002 76.88 4.53 0000 000000000 00000 0000 0.34 2.62E+002 97.36 4.41', '003 74.840 0.63 5.07E+002 64.63 4.03 0.57 4.15E+002 61.96 3.99 0.63 5.43E+002 64.67 5.16'] 

>>> [list(map(float, row.split())) for row in data] 
[[1.0, 2.46, 0.46, 2360.0, 86.66, 16.77, 0.33, 1320.0, 74.41, 17.61, 0.4, 2210.0, 87.39, 22.07], [2.0, 10.31, 0.38, 295.0, 76.88, 4.53, 0.0, 0.0, 0.0, 0.0, 0.34, 262.0, 97.36, 4.41], [3.0, 74.84, 0.63, 507.0, 64.63, 4.03, 0.57, 415.0, 61.96, 3.99, 0.63, 543.0, 64.67, 5.16]] 

map只是說「做一切該功能(float())在此列表中(的split()結果,這是一串字符串)'。在Python 3中,它返回一個迭代器,所以我們必須要求它的list()。使用for循環或列表理解而不是map更好,但在這種情況下它很方便。

0

Asuming您的數據存儲在一個名爲數據列表,你可以使用 data =[[int(el) for el in string.split(' ')] for string in data]

+0

這些看起來像整數?另外,最好使用'split()'而不是'split('')' –