python学习笔记2之基本数据结构

1. list (列表)

  python中列表表示可变的有序的集合,集合元素本身没有限制,可以为不同的数据类型。

  定义列表的几种方式:

L = [1, -10.5, True, None]
L = [x for x in range(1, 10)]  # 列表生成式,生成[1,2, ..., 9] 的列表

 构建空的list:

L = []
L = list()

 常用方法:

# 追加元素到末尾
L.append(12)

# 删除末尾元素
L.pop()  # L.pop(-1)等价

# 将元素插入到指定位置
# 在第0个位置插入值-1,注意不能越界
L.insert(0, -1)

# 获取列表元素的值: L[i]
#  0 <= i < len(L)
# -i 表示倒数第i个元素索引

# 改变某个值
L[0] = 2

# 内置函数获取列表的长度
len(L)
2. tuple (元组)

 它也是一种有序的序列,但是和列表的区别是:一旦初始化值之后,值不能再修改(对值的指向不能再改变)。

t = (1, -10.5, True, None)

# 定义空的元组
t = ()
t = tuple()

# 定义只含有一个元素的元组
t = (1,)  # 不能写成t = (1), 因为t = (1) 等价于 t = 1, t就不是tuple了
t = (1, 2, 3, [1, 2, 3])

# 改变第0个元素的值
t[0] = -1  # Error

# 改变第3个元素的值
t[3] = []  # Error,因为改变了指向
t[3].insert(4)  # OK,没有改变指向,列表本身是可变的

 由于tuple本身不可变,因此没有类似list那样的insert,pop等方法。

3. 切片操作 (slice)

 利用切片可以很简单的对list,tuple进行截取,甚至复制等。

# 可以对list或tuple进行切片(slice)操作
L = [x for x in range(1, 10)]
t = tuple(x for x in range(1, 10))

# 语法:L[x:y:z], x,y,z为整数,x表示切片起始位置(包括),y表示结束位置(不包括),z表示步进(step)

# 获取前4个值:
L[0:4]
L[:4]

# 获取后4个值
L[-4:]

# 获取第1到第5个值,每隔两个取一个
L[0:4:2]

# 复制一份list
L[:]

注意,切片返回的是新的list 或tuple,并未改变原来的值。
 另,字符串本身也可以切片操作,以达到截取字符串的目的。

4. 字典(dict)

 字典类似于java中的Map结构, 存储的是key-value键值对。

 创建dict:

d = {'name': 'zhangsan', 'age':20, 'address': ['gz', 'sz']}
#支持关键字参数**kwargs
d = dict(name = 'zhangsan', age = 20)
#empty dict
d = dict() 

 常用方法:

#动态添加
d['score'] = 100

#覆盖旧值
d['score'] = 99

#取值
#key不存在报错
d['score']
#key不存在返回None
d.get('score')

d.pop('score')
#删除所有
d.clear()

 字典支持str, int, 甚至tuple作为key(前提是tuple没有可变元素), 但是list是可变的,不能作为key。

5. set

 set可以看成字典key的无序集合,自带去重效果。
 创建set:

s = {1,2,3}
#也可以传入可迭代对象,如list, str
s = set([1,2,3]) #==> {1,2,3}
s = set('123') #==> {'1', '2', '3'}

#empty set
s = set()
s = {} #Error,这不是一个set

 常用方法:

#添加元素
s.add(5)
s.add((1,))
s.add((1,2,[1,2])) # Error,虽然是元组作为key,但元组又包含了可变的list
s.add([1,2, 3]) #Error , set要求值是不可变的, 因为需要计算hash值

#删除元素, key不存在会报错
s.remove(5)

# set 数学运算
s1 = {1,2}
s2 = {3,4}

#取交集,返回set
s1 & s2 #==> set()
#取并集
s1 | s2 #==> {1,2,3,4}
6. 总结

 以上为python中最常用的数据结构,记录备忘。
 要深刻理解可变的含义,注意元组的赋值操作,dict 的key,set 元素的特殊性。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值