【问题标题】:List of lists based on numbers in another list基于另一个列表中的数字的列表列表
【发布时间】:2013-10-27 21:49:36
【问题描述】:

假设我有一个数组

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) 我知道问题是我试图拟合一个期望值的序列,但我可以不知道我的解决方法。

我该怎么办?

【问题讨论】:

    标签: python arrays numpy


    【解决方案1】:

    这应该可以工作

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

    更新

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

    注意这里python2和python3在实现上是有区别的。在 python2 中,这实际上会生成一个列表列表。然而,在 python3 中,这会生成一个生成器列表(python2 的等效项是 xrange),这通常更有效。

    【讨论】:

    • 效果很好!你介意添加一点解释吗?据我了解,range(x) 正在接收a 中的项目,但我不太明白它是如何将它们分组到一个列表中的。
    猜你喜欢
    • 1970-01-01
    • 2011-03-29
    • 1970-01-01
    • 1970-01-01
    • 2022-12-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-02
    相关资源
    最近更新 更多