python - 如何从 numpy 数组中删除一个元素,然后将其放回列表中
问题描述
我有一个 numpy 数组。我想删除第一个元素并打印剩余的数组。然后我想放回第一个元素并删除第二个元素并打印列表,然后我放回第二个元素并删除第三个元素。我想对整个数组重复相同的过程。但我不知道该怎么做。
`a= np.array([11,12,13,14,15])
for i in range(len(a))
E_list= a[]`
解决方案
首先是一个简单的列表方法:
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]]