2013-10-27 214 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