Golang 切片

article/2025/10/28 23:38:49

文章目录

        • 和数组的区别
        • 声明
        • 空切片可以和nil相等
        • 切片长度,容量
        • 切片增加元素
        • 切片删除元素
        • 切片排序
        • 切片截取范围
        • 多维切片

和数组的区别

1.数组是定长,切片不是
2.数组是值传递,切片不是

声明

1.通过var声明
2.简短声明

package mainimport "fmt"func main() {var a []intvar b = []int{1,2,3}var c = []int{1,2,3}d := []int{1,2,3}e := []string{"a"}fmt.Println(a,b,c,d,e)
}

3.使用make创建

package mainimport "fmt"func main() {//使用make创建的好处是可以方便的指定切片长度和容量a := make([]int,5,6)fmt.Println(len(a),cap(a))
}

空切片可以和nil相等

package mainimport "fmt"func main() {var s []int//空切片可以和nil相等//result:truefmt.Println(s == nil)
}

切片长度,容量

1.长度使用len获取,容量使用cap获取

package mainimport "fmt"func main() {a := make([]int,5,6)fmt.Println(len(a),cap(a))
}

2.长度是当前可见元素个数 ,容量的作用: 在容量范围内是引用,超过容量后才会进行扩容分配

package mainimport "fmt"func main() {//one start//指定长度4,容量7a := make([]int, 4, 7)fmt.Println(len(a), cap(a))//one end//two start//长度是当前可见元素个数 ,容量的作用: 在容量范围内是引用,超过容量后才会进行扩容分配b := a[2:3]//result:[0 0]fmt.Println(b)b[0] = 22//result:[0 0 22 0] [22]//因为是引用,所以a中元素也会跟着改变fmt.Println(a, b)//two end//threec := append(a[:],1,2,3)c[0] = 666//result: [666 0 22 0]fmt.Println(a)d := append(a[:],1,2,3,4)d[0] = 888//result: [666 0 22 0] 超过容量,重新分配,所以a不会受影响fmt.Println(a)
}

在这里插入图片描述

3.容量计算方式: next_cap = cap - start
cap可以缩小(但是必须大于等于end)
扩容后的新切片会重新分配容量

package mainimport "fmt"func main() {a := make([]int,3,7)//result:7fmt.Println(cap(a))b := a[2:]//result: 7 - 2 = 5fmt.Println(cap(b))c := b[1:2]//result: 5 - 1 = 4fmt.Println(cap(c))
}
package mainimport "fmt"func main() {a := make([]int, 3, 7)//指定容量=4b := a[0:3:4]//result: 不是 7-0 而是 4-0fmt.Println(cap(b))//指定容量=2c := b[1:2:2]//result:2-1=1fmt.Println(cap(c))
}

切片增加元素

使用append尾部追加

package mainimport "fmt"func main() {a := []int{1,2,3,4,5}b := append(a,6,7)fmt.Println(b) //[1 2 3 4 5 6 7]
}

切片删除元素

1.从头删除
2.从尾部删
3.使用append实现从中间删

package mainimport "fmt"func main() {//从头部删a := []int{1,2,3,4}fmt.Println(a[1:])//从尾部删fmt.Println(a[0:len(a) - 1])//从中间删(删除2) append + slicefmt.Println(append(a[0:1],a[2:]...))
}

4.使用copy实现从中间删除

package mainimport "fmt"func main() {//从头部删a := []int{1, 2, 3, 4}fmt.Println(a[1:])//使用copy实现从中间删除(删除2)//copy(p1,p2) p2中的参数覆盖p1中的参数(set p1[0] = p2[0],p1[1]=p2[1],p1[n]=p2[n]......)b := a[1:] //[2,3,4]c := a[2:] //[3,4]//b 变成 3 4 4 a 变成 1 3 4 4copy(b,c)// 1,3,4fmt.Println(a[0:len(a) - 1])
}

切片排序

提供了切片排序函数,常用的有(sort.Ints,sort,Strings)

package mainimport ("fmt""sort"
)func main() {a := []int{1,5,2,4}c := []string{"a","e","b","c"}sort.Ints(a)sort.Strings(c)fmt.Println(a)fmt.Println(c)
}

切片截取范围

切片截取范围可以大于len小于等于cap

package mainimport "fmt"func main() {a := make([]int,3,6)//切片截取范围可以大于len小于等于capb := a[:]//大于0小于等于6即可c := a[:6]fmt.Println(b) //[0 0 0]fmt.Println(c) //[0 0 0 0 0 0]
}

多维切片

package mainimport "fmt"func main() {//多维切片a := make([][]int,2,3)fmt.Println(a) //[[][]]a[0] = []int{1,2,3}fmt.Println(a) //[[1 2 3] []]
}

http://chatgpt.dhexx.cn/article/nkprMmkl.shtml

相关文章

Java 各种 切片 操作(Array String List)

在python的 [xx:xx] 切片操作中快乐之后,返回Java变成发现这个习惯保持保持下去了!,可惜JDK并不认账反手给我爆了两个红JDK:这是别人的香水味! 所以这次总结一下在Java中各种数据类型的切片操作如何实现&#x…

python切片操作方法小总结

文章参考自:link. python切片的详细总结 最近学习python切片,时而醍醐灌顶时而云里雾里,今天终于弄清楚了 python切片 里面自己经常疑惑的地方,记录一下,方便以后查看。 一、切片的2种索引方向 如果掌握切片方法&a…

Python中numpy数组切片

参考Python中numpy数组切片 - 云社区 - 腾讯云 1、基本概念 Python中符合切片并且常用的有:列表,字符串,元组。 下面那列表来说明,其他的也是一样的。 格式:[开头:结束:步长] 开头&#xff1a…

python切片

前言 所谓切片就是在某个数据里提取需要的部分,提取到的是某个索引下的值,或者索引区间的值 一、认识切片 ① 支持切片操作的数据类型有: list(列表),tuple(元祖),st…

字符串的切片操作

字符串的切片操作: 1.知识点: str[start: end:方向和步长],没有方向和步长默认正向。 方向: 1 表示从左向右 0,1,2,3,4,5。。。 -1 表示从右向左 注意数值的顺序:[5:0]正向不行,反向行 [0:5]正向…

25. Python 字符串的切片方法

25. Python 字符串的切片方法 文章目录 25. Python 字符串的切片方法1. 索引取值知识回顾2. 什么是切片3. 切片的语法4. 切片示例4.1 步长为1的切片取值4.2 步长为2的切片取值4.3 省略开始索引4.4 省略结束索引4.5 步长为-2 5. 课堂练习6. 总结 1. 索引取值知识回顾 【索引取值…

Go语言切片详解

切片(slice)是对数组的一个连续片段的引用,所以切片是一个引用类型(因此更类似于 C/C 中的数组类型,或者 Python 中的 list 类型),这个片段可以是整个数组,也可以是由起始和终止索引…

字符串的切片1

切片的基本语法格式:[头下标:尾下标:步长] 1.字符串切片可以对字符串进行截取操作,获取一段子串。 2.[头下标:尾下标]遵循前闭后开规则(头标可取到,尾标取不到)。 3.步长可省略&a…

Python3的切片

Python3的切片非常灵活,可以很方便地对有序序列进行切片操作,代码简单易用。 大家都知道,我们可以直接使用索引来访问序列中的元素,同时索引可分为正向和负向两种,而切片也会用到索引,下面放上一个图&…

Python列表切片详解([][:][::])

Python切片是list的一项基本的功能,最近看到了一个程序,里面有这样一句类似的代码: a list[::10] 不太明白两个冒号的意思就上网百度,发现大多数人写的博客中都没有提到这一个用法,因此自己翻阅《Python核心编程中文…

Numpy 数组切片

一、列表切片(一维数组) 1.1、切片原理 列表切片是从原始列表中提取列表的一部分的过程。在列表切片中,我们将根据所需内容(如,从何处开始,结束以及增量进行切片)剪切列表。Python中符合序列的…

python 字符串切片

1. 字符串的索引 字符串的索引从前往后是从0开始计数,从后往前是从-1开始依次 -1 2.字符串切片方法 语法格式 str[beginIndex:endIndex:step]取值结果: [begin,end) / 含头不含尾 步长不设置时默认为1 3.切片 ① 取x-y位置的字符串: 从中间开始,中间…

Python 列表切片操作

Python列表切片 切片是Python序列的重要操作之一,适用于列表、元组、字符串、range对象等。可以用切片截取列表中任何部分来获得一个新的列表,也可以进行元素的增、删、改。在Python中,序列的序号即可以从左向右以0开始依次增加,…

Python 列表切片详解

一、列表切片 切指–将某些东西切成小块。列表切片是从原始列表中提取列表的一部分的过程。在列表切片中,我们将根据所需内容(如,从何处开始,结束以及增量进行切片)剪切列表。 Python中符合序列的有序序列都支持切片&a…

详解Python中的切片(一看就懂版)

前言 在我们使用Python的时候,经常会听到“切片”这个词!那什么是切片呢?切片是对序列数据(列表、元组、字符串),根据下标索引,对一定范围内数据的获取。 简单来说就是,通过下标索引…

图片切片分割

在处理图片时,若加载一个大的图像,它加载所需要的时间一般会很长。 普通解决办法:压缩图片。 压缩时需要注意以下几个问题: 1、实际文件的大小; 2、分辨率; 3、压缩; 一般来说,压缩图片会使图像质量受…

python中[-1] [:-1] [::-1] [n::-1] 切片的用法

首先简明概要说明用法,然后再用实际例子阐述。 用法概述 [-1] [:-1] [::-1] [n::-1]都是python中切片的使用方法。 [-1]:获取最后一个元素,类似于matlab中的end;[:-1]:除了最后一个元素,获取其他所有的元…

第五节——切片

切片 切片(Slice)是一个拥有相同类型元素的可变长度的序列。它是基于数组类型做的一层封装。它非常灵活,支持自动扩容。切片是一个引用类型,它的内部结构包含地址、长度和容量。切片一般用于快速地操作一块数据集合。 切片定义 …

切片(slice)

一.切片的基本介绍(slice) (1) 切片是一个数组的引用,因此切片是引用类型,在进行传递时,遵守引用传递的机制。 (2) 切片的使用和数组类似,遍历切片、访问切片的元素和求切片长度len(slice)都一样 (3)切片的长度是可以变化的&#…

切片基础知识

一、切片含义 1.切片(slice)是对序列型对象的一种高级索引方法。python中是用来切割可迭代对象(容器) 2.切片对象:列表list, 字符串string, 元组tuple,range函数等 二、形式 一个完整的切片有三个参数 object[start:end:step…