我有一个numpy数组。我想删除第一个元素并打印剩余的数组。然后我要放回第一个元素并删除第二个元素并打印列表,然后放回第二个元素并移动第三个元素。我想对整个数组重复相同的过程。但是我不确定该怎么做。
`a= np.array([11,12,13,14,15])
for i in range(len(a))
E_list= a[]`
答案 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]