我有一个列表A = [1, 2, 3, ..., n]
,想反复移动列表以获得列表列表。第一行应该是A
,第二行[2, 3, 4, ...]
是第三行[3, 4, 5, ...]
,直到最后一行[n, 0, 0, ...]
。最后一列中缺少的元素应为零。我试图将它们分别放置,但是n> = 100,因此手动填充零会花费很长时间。我该怎么做呢?
为numpy数组编辑相同的问题,这是我真正拥有的。
>>> a = [1, 2, 3, 4]
>>> [ a[i:] + i*[0] for i in range(len(a))]
[[1, 2, 3, 4], [2, 3, 4, 0], [3, 4, 0, 0], [4, 0, 0, 0]]
要获取第i个移位列表,我们可以使用:a[i:] + i*[0]
。列表推导针对我们需要的所有i重复执行此操作。
+
对于numpy数组,意味着与普通python列表不同。因此,上述代码需要进行调整以使其适应numpy:
>>> import numpy as np
>>> a = np.arange(1, 5)
>>> [ np.concatenate((a[i:], np.zeros(i))) for i in range(len(a))]
[array([1, 2, 3, 4]),
array([2, 3, 4, 0]),
array([3, 4, 0, 0]),
array([4, 0, 0, 0])]
如果您希望最终结果是一个numpy数组:
>>> np.array([np.concatenate((a[i:], np.zeros(i))) for i in range(len(a)) ])
array([[ 1., 2., 3., 4.],
[ 2., 3., 4., 0.],
[ 3., 4., 0., 0.],
[ 4., 0., 0., 0.]])
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句