在golang中查找并删除切片中的元素

在golang中查找并删除切片中的元素,go,slice,Go,Slice,我有像[1,-13,9,6,-21,125]这样的数字片段。我想找到小于零的元素,然后删除它们 这可以通过简单的方式完成: 只需迭代切片,若元素小于零,则->删除它。但由于每一步都可能发生切片变化,因此计算成本很高 有没有像numpy.where(数组,条件)和numpy.delete这样优雅的方法呢?将幸存的元素复制到切片的开头,完成后重新切片 p := []int{1, -13, 9, 6, -21, 125} j := 0 for _, n := range p { if n &

我有像
[1,-13,9,6,-21,125]
这样的数字片段。我想找到小于零的元素,然后删除它们

这可以通过简单的方式完成: 只需迭代切片,若元素小于零,则->删除它。但由于每一步都可能发生切片变化,因此计算成本很高


有没有像
numpy.where(数组,条件)
numpy.delete
这样优雅的方法呢?

将幸存的元素复制到切片的开头,完成后重新切片

p := []int{1, -13, 9, 6, -21, 125}
j := 0

for _, n := range p {
    if n >= 0 {
        p[j] = n
        j++
    }
}
p = p[:j]
没有分配内存,但修改了原始片。如果无法修改原始切片,请分配并复制到新切片:

p := []int{1, -13, 9, 6, -21, 125}
j := 0
q := make([]int, len(p))
for _, n := range p {
    if n >= 0 {
        q[j] = n
        j++
    }
}
q = q[:j] // q is copy with numbers >= 0