python,golang的⼏种数据集合类型(⼀)
python⾥⾯有:
1)list 数组
slice 切⽚
2)tuple 元组
3)dict 字典
4)set 集合
golang的:
1) array 数组
slice 切⽚
2)没有元组
3)map 字典
4)没有基础类型的set
综上,两者都有的:数组,字典
1.数组
1) python:
a) python中数组是list,可以直接使⽤⼀对[ ]括起来的数据来初始化,或者初始化⼀个空的数组:
1 >>> a=[]
2 >>> b=["aa","bb","cc"]
甚⾄数组中元素可以类型不⼀样O__O "…
1 >>> c=["aa","bb",123]
2 >>> len(c)
3 3
4 >>> type(c)
5 <type 'list'>
6 >>> type(c[0])
7 <type 'str'>
8 >>> type(c[1])
9 <type 'str'>
10 >>> type(c[2])
11 <type 'int'>
b) 访问元素,可以下标(溢出会报错,下标可以是负数):
1 >>> b[0]
2'aa'
3 >>> c[2]
4 123
5 >>> c[3]
6 Traceback (most recent call last):
7 File "<stdin>", line 1, in <module>
8 IndexError: list index out of range
或者遍历:
1for val in c:
2print val
3 #或者
4for idx, val in enumerate(c):
5print idx,val
也可以使⽤c.index(obj),返回的是list⾥⾯的第⼀个值为obj的索引(下标)
c) 追加、修改元素。注意追加(append)的时候,参数是元素,如果是追加另⼀个list,那么要使⽤newlist=a+xxx或者
1 >>> a=["11"]
2 >>> a.append("abc")
3 >>> a.append(123)
4 >>> a[0]=111
5 >>> print a
6 [111, 'abc', 123]
遍历⾥⾯的修改:
1 c=["aa","bb",123]
2for idx, val in enumerate(c):
3if idx == 1:
4 val="1" #不能修改数组⾥⾯的值
5if idx == 2:
6 c[idx]="2" #修改数组⾥⾯的值
7print c
8#输出:['aa', 'bb', '2']
d) 插⼊元素也可以⽤c.insert(idx,val)会在下标为idx(如果是负数,则是逆序的下标,从-1开始)的位
置插⼊这个val,其他的依次后移。虽然不清楚python中list的底部实现,但是如果是数组,这样操作的效率应该不会很⾼,不是很推荐。
go 字符串转数组 e) 删除元素 del c[idx]
python中的切⽚(slice):
切⽚是构建在数组上的概念。原来我总是理解不了,“切⽚”,从字⾯上看完全理解不了,接受不了。后来觉得可以理解为数组的的取值器,⼤概可以想象⼀个数组就是⼀个轨道,切⽚是滑动在轨道上的⼀个框,框出数组的⼀部分。
1 >>> a=[1,2,3,4,5,6]
2 >>> b=a[2:5]
3 >>> print b
4 [3, 4, 5]
a[start:end] 就是取 [start,end)这个区间的元素,start,end是下标。就是说包含start,但是不包含end,即start~(end-1)。上⾯的例⼦就是取下标为2,3,4的元素。
如果start >= end,取出来的就是空数组。
start是可以负数,数组的最后⼀个值下标是-1.往前⼀个是-2,以此类推。
start或者end可以为空,为空就是不设限。
除了start和end,还有个步长的参数。这个感觉⽤的不多,不过步长设为-1,即[::-1],就是反转数组,这个挺有⽤。
简单来说,如果切⽚当做⼀个滑动框,那么这个框随意滑,能框到数据就返回数据,框不到数据,就返回空数组。左右边框可以给任意的下标值,正数就从数组的0下标开始计;负数就从数组的最⼤下标开始,计为-1。⽽且,左边框的下标要包含,有边框的下标不包含。
2) golang:
a) golang中的数组,初始化:
1 a := []string{"1","2"}
2var b []string
3 c := []string{}
4 d := make([]string,2)
其中,make这种⽅式,创建的是⼀个包含元素的数组。⽐如d这⾥有两个元素,两个空的字符串。如果这个数组是[]int,则包含了两个0。即各⾃类型的零元素。
数组元素类型是要求⼀样的,这个和python不⼀样。
b) 访问元素,下标(溢出会报错,⽽且下标必须不能是负数),遍历:
1 a := []string{"1","2","3","4"}
2for idx, val := range a {
3 fmt.Println(idx, val)
4 }
c) 追加、修改元素:
1 a = append(a, "abc")
2 a[2] = "new2"
d) 插⼊元素,好像没有。。当然,可以通过slice切分,在数组中间append⼀个值,再把数组后半段append回去。总之,对数组的
插⼊元素,不是好的做法。
e) 删除元素,好像也没有。。同样,在数组中间删除元素也不推荐。
golang中的切⽚(slice):
我觉得golang中的切⽚和python可以⼀样理解。
m := []string{"a","b","c","d","e"}
m1 := m[2:3]
// m1=["c"]
m[start:end],同样是[start,end)区间。不过golang⾥⾯不⽀持负数的下标,也不⽀持步长。必须start<=end.否则报错。感觉其他没啥区别。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论