2013-06-30 42 views
0

我已閱讀使用文件到Python腳本:如何快速轉換爲列表列表,在每個元素的開頭插入一個字符串?

data=np.loadtxt('myfile') 

其中給出型「numpy.ndarray」的號碼的列表,格式如下:

print(data) = [1, 2, 3] 

我需要轉換這成列表的列表,每一個單字符字符串「a」和上述值中的一個,即:

[[a,1], 
[a,2], 
[a,3]] 

(請注意,「一個」不每個列表,它R的不同作爲一個簡單的字母'a'組成的字符串)

什麼是最快和最pythonic這樣做? 我已經嘗試了幾種不同形式的列表理解,但是我經常會以顯示'None'的行結束。結果不一定是'numpy.ndarray'類型,但是它會是首選。

另外,我怎麼會是這樣的方法擴展到已經從該文件已經作爲一個列表的列表讀取數據,即:

data2=np.loadtxt('myfile2',delimiter=' ') 
print(data2)= [[1,2], 
       [3,4], 
       [5,6]] 

爲了讓結果:

[[a,1,2], 
[a,3,4], 
[a,5,6]] 

感謝您的幫助!

回答

0

也許是這樣的:

>>> import numpy as np 
>>> data = [1,2,3] 
>>> a = np.empty([len(data),2], dtype=object) 
>>> a 
array([[None, None], 
     [None, None], 
     [None, None]], dtype=object) 
>>> a[:,0]='a' 
>>> a 
array([[a, None], 
     [a, None], 
     [a, None]], dtype=object) 
>>> a[:,1]=data 
>>> a 
array([[a, 1], 
     [a, 2], 
     [a, 3]], dtype=object) 
>>> data2=np.array([[1,2],[3,4],[5,6]]) 
>>> data2 
array([[1, 2], 
     [3, 4], 
     [5, 6]]) 
>>> b = np.empty([len(data2),3],dtype=object) 
>>> b 
array([[None, None, None], 
     [None, None, None], 
     [None, None, None]], dtype=object) 
>>> b[:,0]='a' 
>>> b 
array([[a, None, None], 
     [a, None, None], 
     [a, None, None]], dtype=object) 
>>> b[:,1:]=data2 
>>> b 
array([[a, 1, 2], 
     [a, 3, 4], 
     [a, 5, 6]], dtype=object) 

編輯:在響應由OP您可以通過此標籤的欄目發表評論:

>>> data2=np.array([[1,2],[3,4],[5,6]]) 
>>> c = zip('a'*len(data2),data2[:,0],data2[:,1]) 
>>> c 
[('a', 1, 2), ('a', 3, 4), ('a', 5, 6)] 
>>> d = np.array(c,dtype=[('A', 'a1'),('Odd Numbers',int),('Even Numbers',int)]) 

>>> d 
array([('a', 1, 2), ('a', 3, 4), ('a', 5, 6)], 
     dtype=[('A', '|S1'), ('Odd Numbers', '<i4'), ('Even Numbers', '<i4')]) 
>>> d['Odd Numbers'] 
array([1, 3, 5]) 

我不很瞭解但數組d是一個記錄數組。你可以在Structured Arrays (and Record Arrays)找到信息。我遇到了「A」列的dtype問題。如果我把('A', str)那麼我的一個「A」列總是空的,''。看着Specifying and constructing data types後,我嘗試使用('A', 'a1'),它的工作。

+0

這很好用;謝謝。我能否問一下,你是否會知道如何調整dtype,以便命名每個列表中的列?例如,在上面的最後一個數組中,每列的dtype名稱將是'A列','奇數','偶數'? 我意識到這是一個完全不同的問題,到一個我張貼,所以如果你不能回答這個問題,我明白了! 非常感謝! – FreeBixi

相關問題