首页 > 解决方案 > 如何从 numpy 数组中删除一个元素,然后将其放回列表中

问题描述

我有一个 numpy 数组。我想删除第一个元素并打印剩余的数组。然后我想放回第一个元素并删除第二个元素并打印列表,然后我放回第二个元素并删除第三个元素。我想对整个数组重复相同的过程。但我不知道该怎么做。

`a= np.array([11,12,13,14,15])
for i in range(len(a))
    E_list= a[]`

标签: pythonarraysnumpy

解决方案


首先是一个简单的列表方法:

In [41]: alist = [11,12,13,14,15]
In [42]: for i in range(len(alist)):
    ...:     a = alist[:] # copy
    ...:     a[i:i+1]=[]  # remove
    ...:     print(a)
    ...:     
[12, 13, 14, 15]
[11, 13, 14, 15]
[11, 12, 14, 15]
[11, 12, 13, 15]
[11, 12, 13, 14]

通过复制每个循环,我不必将元素放回原始列表中。如果作业真的需要重新插入,我可以做(这需要更多的反复试验):

In [46]: alist = [11,12,13,14,15]
In [47]: for i in range(len(alist)):
    ...:     a = alist[i]
    ...:     alist[i:i+1]=[]  # remove
    ...:     print(alist)
    ...:     alist[i:i]=[a]
    ...:     
[12, 13, 14, 15]
[11, 13, 14, 15]
[11, 12, 14, 15]
[11, 12, 13, 15]
[11, 12, 13, 14]

这个的数组版本看起来更简单:

In [48]: arr = np.array( [11,12,13,14,15])
In [49]: for i in range(len(alist)):
    ...:     a = np.delete(arr, i)  # makes a copy
    ...:     print(a)
    ...:     
    ...:     
[12 13 14 15]
[11 13 14 15]
[11 12 14 15]
[11 12 13 15]
[11 12 13 14]

delete创建一个新数组,因此我们不必进行显式复制,也不必重新插入值。在幕后delete正在做类似的事情:

In [50]: for i in range(len(alist)):
    ...:     a = np.concatenate((arr[:i],arr[i+1:]))
    ...:     print(a)

实际上我们可以对列表做同样的事情

In [54]: [alist[:i]+alist[i+1:] for i in range(len(alist))]
Out[54]: 
[[12, 13, 14, 15],
 [11, 13, 14, 15],
 [11, 12, 14, 15],
 [11, 12, 13, 15],
 [11, 12, 13, 14]]

推荐阅读