如何从numpy数组中删除元素,然后将其放回列表中

时间:2018-07-16 09:43:45

标签: python arrays numpy

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

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

2 个答案:

答案 0 :(得分:0)

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

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]]

答案 1 :(得分:0)

遍历列表并将转换保存到数组中,直到最后将是您的朋友,因为可以更好地优化列表以进行迭代。本练习全部与列表切片有关。您将要遍历列表,并在每次迭代时,围绕索引制作一对原始列表的切片,然后打印切片的串联。这实际上并不会修改原始列表,而是根据所需参数创建新列表。

In [1]: alist = [1,2,3,4,5]

In [2]: for i, a in enumerate(alist):
   ...:     new_list = alist[:i] + alist[i+1:]
   ...:     print(new_list)
   ...:
[2, 3, 4, 5]
[1, 3, 4, 5]
[1, 2, 4, 5]
[1, 2, 3, 5]
[1, 2, 3, 4]

如有必要,可以使用numpy.array复制它,并且切片语法相同。但是数组串联需要numpy.concatenate函数,并且比较难看。

In [20]: np_arr = np.array([1,2,3,4,5])

In [21]: for i, a in enumerate(np_arr):
    ...:     new_arr = np.concatenate((np_arr[:i], np_arr[i+1:]))
    ...:     print(new_arr)
    ...:
[2 3 4 5]
[1 3 4 5]
[1 2 4 5]
[1 2 3 5]
[1 2 3 4]