Python NumPy如何将指定元素移到目标位置并让其他元素上移一位
需求完全可以实现,以下是两种常用的实现方案:
你描述的位置为1-based计数,对应NumPy默认的0-based索引规则:示例中元素5的原始索引为2,目标索引为0,你可根据实际需求调整参数适配任意移动场景。
- 方案1:切片拼接法(性能最优,适合大数组场景)
直接通过NumPy切片拆分再拼接完成移动,没有额外的冗余操作:
import numpy as np arr = np.array([2,4,5,6]) old_idx = 2 # 待移动元素的原始0基索引 new_idx = 0 # 目标0基索引 if old_idx < new_idx: # 元素向后移动的场景 new_arr = np.concatenate([arr[:old_idx], arr[old_idx+1:new_idx+1], [arr[old_idx]], arr[new_idx+1:]]) else: # 元素向前移动的场景(适配本次示例) new_arr = np.concatenate([[arr[old_idx]], arr[new_idx:old_idx], arr[old_idx+1:]]) print(new_arr) # 输出:array([5, 2, 4, 6])
- 方案2:insert+delete组合法(逻辑最简单,易理解)
先把目标元素插入到指定位置,再删除原位置的重复元素即可:
import numpy as np arr = np.array([2,4,5,6]) old_idx = 2 new_idx = 0 # 插入元素到目标位置 temp_arr = np.insert(arr, new_idx, arr[old_idx]) # 删除原位置的元素(插入操作会导致原元素索引后移一位,所以要删old_idx+1位置) new_arr = np.delete(temp_arr, old_idx + 1) print(new_arr) # 输出:array([5, 2, 4, 6])
内容的提问来源于stack exchange,提问作者Nacho Escribano
相关产品推荐
相关产品推荐

