2013-10-27 73 views
2

比方說,我有一個數組名單列表

a = np.array[5, 3, 2]

,並根據該數組我想要的形式返回一個新的數組:

b = np.array[ [0, 1, 2, 3, 4], [0, 1, 2], [0, 1] ]

我一直想:

for item in a: 
    b = np.hstack(np.arange(item)) 
    print b 

,但這隻給了我沒有將它們加入到數組中的元素;

for item in a: 
    b = b.append((b[:], b[item])) 
    print b 

但這種方法很好地吹了一個:

AttributeError: 'numpy.ndarray' object has no attribute 'append' 

我已經嘗試過其他的東西,比如:

b[item] = np.arange(item), 

但一個抱怨了界外指標。

而且

b = np.zeros(len(a)) 
for item in np.arange(len(a)): 
b[item] = np.arange(b[item]) 
print b 

ValueError: setting an array element with a sequence. 

抱怨說,最後一個是一個看起來更有前途,並尋找在這個網站(https://stackoverflow.com/a/13311979/531687)我知道這個問題是一些問題我試圖在一個預期值的時候適合一個序列,但我無法弄清楚它的方式。

我該怎麼辦?

回答

3

這應該工作

b = [range(x) for x in a] 

更新

括號[...]在這裏創建列表和迭代器內可用於定義列表中的項目。在這種情況下,a中的每個項目的類型範圍(x)的項目。

請注意,python2和python3在實現方面存在差異。在python2中,這實際上會生成一個列表列表。然而,在python3中,這會生成一個生成器列表(python2相當於xrange),這通常更高效。

+0

完美的工作!你介意加一點解釋嗎?正如我所理解的那樣,'range(x)'正被饋給'a'中的項目,但我無法完全理解它是如何將它們分組成列表的。 – Ricardo