基于另一个列表中的数字的列表列表

时间:2013-10-27 21:49:36

标签: python arrays numpy

假设我有一个数组

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

但是这种方法很好地用a:

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)我知道问题是我正在尝试拟合一个预期值的序列,但是我无法弄明白我的方式。

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:3)

这应该有效

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

<强>更新

括号[...]创建一个列表,迭代器内部可用于定义列表中的项目。在这种情况下,a中每个项目的类型范围(x)的项目。

请注意,python2和python3之间的实现存在差异。在python2中,这实际上生成了一个列表列表。然而,在python3中,这会生成一个生成器列表(python2等价物将是xrange),这通常更有效。