slice在Python和Go中的异同
Go中也有slice,虽然和Python中的slice同名,但有很大的不同。
Python中的slice侧重于从序列中提取子序列,而Go的slice则是一种动态数组的实现。
1、Python中的slice
基本语法
sequence[start:stop:step]# 示例
lst = [0, 1, 2, 3, 4, 5]
sublist = lst[1:4] # [1, 2, 3]
reverse = lst[::-1] # [5, 4, 3, 2, 1, 0]
在python中,slice是一种操作序列的方法(注意这里和go的区别),返回的对象是原序列的浅拷贝,适用于所有的序列类型,比如list、tuple、str、bytes。
# Python 切片的多样性
text = "hello"
print(text[1:4]) # "ell"
print(text[::2]) # "hlo"
print(text[::-1]) # "olleh"# 切片对象
my_slice = slice(1, 5, 2)
lst = [0, 1, 2, 3, 4, 5]
print(lst[my_slice]) # [1, 3]2、Go中的slice
在go中,slice是一种数据结构
var slice []int // 声明切片
slice := make([]int, 5) // 创建切片
slice := []int{1, 2, 3, 4, 5} // 字面量// 从数组创建切片
arr := [5]int{1, 2, 3, 4, 5}
slice := arr[1:4] // [2, 3, 4]底层是引用的数组,修改切片,底层的数组也会影响;slice可以使用append动态增长。
package mainimport "fmt"func main() {// 展示 slice 的底层数组共享arr := [5]int{1, 2, 3, 4, 5}slice1 := arr[1:4] // [2, 3, 4]slice2 := arr[2:5] // [3, 4, 5]// 修改 slice1 会影响底层数组和 slice2slice1[0] = 99fmt.Println(arr) // [1, 99, 3, 4, 5]fmt.Println(slice1) // [99, 3, 4] fmt.Println(slice2) // [3, 4, 5] - 注意这里不受影响,因为 slice2 从索引2开始
}我有一个秘密基地,那里存放着我的“不务正业”,这里没有技术,只有故事和观点。
gzh搜索:刘墨泽
