Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何反复移位和填充列表中的元素以获得列表列表?_Python_Numpy - Fatal编程技术网

Python 如何反复移位和填充列表中的元素以获得列表列表?

Python 如何反复移位和填充列表中的元素以获得列表列表?,python,numpy,Python,Numpy,我有一个列表a=[1,2,3,…,n],我想反复移动列表以获得列表列表。第一行应该是A,第二行[2,3,4,…],第三行[3,4,5,…],直到最后一行[n,0,0,…]。最后一列中缺少的元素应为零。我试图将它们单独放置,但n大于等于100,因此手动填充零需要很长时间。我该怎么做 编辑有关numpy阵列的相同问题,这是我真正想问的。为了清晰起见,需要额外详细说明: import pprint A = [1,2,3,4,5] lists = [] lists.append(A) for _

我有一个列表
a=[1,2,3,…,n]
,我想反复移动列表以获得列表列表。第一行应该是
A
,第二行
[2,3,4,…]
,第三行
[3,4,5,…]
,直到最后一行
[n,0,0,…]
。最后一列中缺少的元素应为零。我试图将它们单独放置,但n大于等于100,因此手动填充零需要很长时间。我该怎么做


编辑有关numpy阵列的相同问题,这是我真正想问的。

为了清晰起见,需要额外详细说明:

import pprint

A = [1,2,3,4,5]

lists = []
lists.append(A)

for _ in range(len(A)):
    last_list = lists[-1]             # Grab the last list element from lists
    new_list  = last_list[1:] + [0]   # (See below)
    lists.append(new_list)            # Add new_list to the end of lists

pprint.pprint(lists)
输出:

[[1, 2, 3, 4, 5], [2, 3, 4, 5, 0], [3, 4, 5, 0, 0], [4, 5, 0, 0, 0], [5, 0, 0, 0, 0], [0, 0, 0, 0, 0]]
[[1, 2, 3, 4], [2, 3, 4, 0], [3, 4, 0, 0], [4, 0, 0, 0]]
[[0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [1, 2, 3, 4, 5, 6, 7, 8, 9, 0], [2, 3, 4, 5, 6, 7, 8, 9, 0, 0], [3, 4, 5, 6, 7, 8, 9, 0, 0, 0], [4, 5, 6, 7, 8, 9, 0, 0, 0, 0], [5, 6, 7, 8, 9, 0, 0, 0, 0, 0], [6, 7, 8, 9, 0, 0, 0, 0, 0, 0], [7, 8, 9, 0, 0, 0, 0, 0, 0, 0], [8, 9, 0, 0, 0, 0, 0, 0, 0, 0], [9, 0, 0, 0, 0, 0, 0, 0, 0, 0]]
[[1, 2, 3, 4, 5], [2, 3, 4, 5, 0], [3, 4, 5, 0, 0], [4, 5, 0, 0, 0], [5, 0, 0, 0, 0], [0, 0, 0, 0, 0]]
new_list=last_list[1:][0]
的意思是通过
last_list
中的最后一个元素取“第1个”,并将其与零连接,形成一个名为
new_list
的新列表

注意我之所以说“1th”,是因为python列表是0索引的,所以“1th”是第二个元素

>>> 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
+
对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.]])
输出:

[[1, 2, 3, 4, 5], [2, 3, 4, 5, 0], [3, 4, 5, 0, 0], [4, 5, 0, 0, 0], [5, 0, 0, 0, 0], [0, 0, 0, 0, 0]]
[[1, 2, 3, 4], [2, 3, 4, 0], [3, 4, 0, 0], [4, 0, 0, 0]]
[[0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [1, 2, 3, 4, 5, 6, 7, 8, 9, 0], [2, 3, 4, 5, 6, 7, 8, 9, 0, 0], [3, 4, 5, 6, 7, 8, 9, 0, 0, 0], [4, 5, 6, 7, 8, 9, 0, 0, 0, 0], [5, 6, 7, 8, 9, 0, 0, 0, 0, 0], [6, 7, 8, 9, 0, 0, 0, 0, 0, 0], [7, 8, 9, 0, 0, 0, 0, 0, 0, 0], [8, 9, 0, 0, 0, 0, 0, 0, 0, 0], [9, 0, 0, 0, 0, 0, 0, 0, 0, 0]]
输出:

[[1, 2, 3, 4, 5], [2, 3, 4, 5, 0], [3, 4, 5, 0, 0], [4, 5, 0, 0, 0], [5, 0, 0, 0, 0], [0, 0, 0, 0, 0]]
[[1, 2, 3, 4], [2, 3, 4, 0], [3, 4, 0, 0], [4, 0, 0, 0]]
[[0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [1, 2, 3, 4, 5, 6, 7, 8, 9, 0], [2, 3, 4, 5, 6, 7, 8, 9, 0, 0], [3, 4, 5, 6, 7, 8, 9, 0, 0, 0], [4, 5, 6, 7, 8, 9, 0, 0, 0, 0], [5, 6, 7, 8, 9, 0, 0, 0, 0, 0], [6, 7, 8, 9, 0, 0, 0, 0, 0, 0], [7, 8, 9, 0, 0, 0, 0, 0, 0, 0], [8, 9, 0, 0, 0, 0, 0, 0, 0, 0], [9, 0, 0, 0, 0, 0, 0, 0, 0, 0]]

您正在创建的数组称为。如果您不介意依赖于
scipy
,则可以使用该函数通过单个函数调用创建数组:

In [21]: from scipy.linalg import hankel

In [22]: A = [1, 2, 3, 4, 5]

In [23]: hankel(A)
Out[23]: 
array([[1, 2, 3, 4, 5],
       [2, 3, 4, 5, 0],
       [3, 4, 5, 0, 0],
       [4, 5, 0, 0, 0],
       [5, 0, 0, 0, 0]])

如果这是使用
scipy
的唯一原因,我就不麻烦了——这是一个非常严重的依赖性。但是,如果您已经在使用
scipy
,那么您还可以利用
hankel

的便利。你的迅速反应让我感到很谦卑。因为我是个新手,所以我对列表和数组感到困惑A'是一个数组,当我签出类型(A)时,我得到这个,
numpy.ndarray
,当我打印出来(使用ipython),我得到:
数组([[24.25,22.31,23.62,22.06,22.19,21.75,20.87,19.63,20,22.06]])
。根据您的解决方案,我尝试通过
a.tolist()
将数组转换为列表,但没有达到预期效果。请帮忙@John1024,@jedwards,@Vinod Sharmai如果你真的有新问题,你应该发布一个新问题。在这种情况下,应将附加信息编辑到问题中。你得到了一个考虑到这一点的答案。@John1024:非常有效!谢谢。