Python的数据结构
4.1 元组
4.1.1 创建
#多个元素
tuple = ('元素1','元素2')
#空元组
tuple = ()
#单元素,注意元素后要加逗号
tuple = ('元素',)
4.1.2 访问
#####访问格式
tuple[n]
####################################
#索引值从0开始,可以是正数,也可以是负数,最尾端表示-1,次尾端表示-2,以此类推
print(tuple[1])
#####元组的元素不可添加或删除,创建后的元组不可重新赋值
~~tuple[0] = 'a'~~
#######元组支持分片
tuple[1:-3]#从第三个元素到倒数第二个(不包括倒数第二个)
#####元组可以由其他元组组成,例如二元元组。
tuple = (('z', 'x'),('c', 'v'))
tuple[0][1] = x ##类似二维数组
4.1.3 遍历
###1.len()计算元组的元素个数
###2.range()返回一个由数字组成的列表
#start表示列表开始的值,默认为0;
#stop表示列表结束值;
#step表示步长,每次递增或递减的值,默认1
range([start,]stop[,stop])
for i in range(len(tuple)):
print ("tuple[%d]:'%i,'")
###3.for...in
tuple=('a, z', 'b, m', 'c')
for i in tuple:
for j in i:
print(j)
4.2 列表
4.2.1 增删改查
列表与元组相似,但列表可以实现增删改查几种操作,也同样支持负数索引、分片以及多元列表等特性。
###1.创建
list = [元素1, 元素2,...]
###2.添加元素
# append()可在列表末尾添加元组、列表、字典或任何对象
list.append()
# insert()在指定索引index处插入一个对象
list.insert(index,object)
###3.删除
list.remove(value) # 当被删除元素不止一次出现时,remove()将删除首次出现的元素
list.pop([index]) # 删除索引index指定的值,如果index不指定,则删除列表末尾元素
###4.查找
list1 = ['z','x','c','v']
print(list1.index('x')) # 打印x的索引,输出结果为2
print('c' in list1) # 判断c是否在列表中,返回Ture
###5.排序和反转
list1 = ['z', 'x', 'c', 'v']
list1.sort()
print('sorted list:', list1) # 排序,升序输出
list1.reverse()
print('reversed list:', list1) # 反转元素顺序输出
4.2.2 分片
list1 = ['a', 'c', 'b', 'n', 'm']
print(list1[-2]) # 输出 n
print(list1[1:3]) # 输出 ['c', 'b']
print(list1[-3:-1]) #输出 ['m', 'n']
print(list1[:]) # 从左向右输出
print(list1[::]) # 从左向右输出
print(list1[::-1]) # 从右向左输出
4.2.3 连接
###连接的三种方式
list1 = ['z', 'x']
list2 = ['c', 'v']
list1.extend(list2) # list1连接list2
print(list1)
list3 = ['b']
list1 = list1 + list3 # list1与list3连接赋给list1
print(list1)
list1 += ['n'] # 给list1连接上['n']
除了增删改查之外,列表可以实现堆栈和队列
堆栈:后进先出,append() 把元素添加到栈顶,调用 pop() 将最后一个元素(即 append()添加的元素)弹出。
队列:先进先出,append() 将元素放入队列,调用 pop() 会将第一个元素(list.pop(0))弹出。
4.3 字典
4.3.1 访问
###1. 创建
dict1 = {} # 创建空字典
dict1 = {'a': 'apple', 'A': 'banana'} # 冒号连接key值和value值
dict1 = {1:'a', 2: 'b'} #数字可作为索引值进行访问
###2.访问
dict1 = {'a': 'apple', 'A': 'banana'}
print(dict1) # 输出字典
print(dict1['a']) # 输出a对应的value
print(dict1['A']) # 输出A对应的value,字典中的key区分大小写
### get()方法:D.get(k [,d])
### get()相当于一条if...else语句,当k在字典中时,返回值D[k],当k不在字典中时,返回d,d默认None
dict1 = {'a': 'apple', 'b': 'banana', 'c': 'cat'}
print(dict1.get('z', 'bar'))
print(dict1.get('a', 'bar'))
4.3.2 增删改查
###3.添加、删除与修改操作
dict1 = {'a': 'apple', 'b': 'banana', 'c': 'cat'}
dict2 = {'s':'small', 'b':'big'}
dict1.setdefault('d', 'dog') # 添加元素
dict1.update(dict2) #将dict2合并到dict1,其中dict2键b的值会覆盖dict1键b的值
del(dict1['a']) # 删除键a对应的值
dict1['c'] = 'car' # 更改键c的值
print( dict1.pop('b')) # 弹出b对应的值 big
print(dict1) #输出字典
dict1.clear() #清空字典
print(dict1) #输出字典,输出为 {}
4.3.3 遍历
###4.遍历
#for...in
dict1 = {'a': 'apple', 'b': 'banana', 'c': 'cat'}
for k in dict1:
print ('dict[%s] = ' % k, dict1[k])
#items(),其输出结果为元组
dict1 = {'a': 'apple', 'b': 'banana', 'c': 'cat'}
for k,v in dict1.items():
print ('dict[%s] = ' % k, v)
4.3.4 混合型输出
###5.混合型字典的输出
dict1 = {'a': ('apple',), 'b': ['banana', 'bag'], 'ca': {'z': 'cat', 'y': 'car'}}
print(dict1['a']) # 输出元组
print(dict1['a'][0]) # 访问元组第一个元素,输出 apple
print(dict1['b']) # 输出列表
print(dict1['b'][0]) # 输出 banana
print(dict1['ca']) # 输出键ca对应的value字典
print(dict1['ca']['z']) #输出键z对应的cat
4.3.5 keys()方法和values()方法
dict1 = {'a': 'apple', 'b': 'banana', 'c': 'cat'}
# 输出key值
print(dict1.keys()) # 输出 ['a', 'b', 'c']
# 输出value值
print(dict1.values()) # 输出['apple', 'banana', 'cat']
4.3.6 排序和复制
1. 排序
dict1 = {'a': 'apple', 'b': 'little', 'c': 'big'}
print(sorted(dict1.items(), key=lambda d: d[0])) # d[0]表示按key值排序
print(sorted(dict1.items(), key=lambda d: d[1])) # d[1]表示按value值排序
输出
[('a', 'apple'), ('b', 'little'), ('c', 'big')]
[('a', 'apple'), ('c', 'big'), ('b', 'little')]
2.复制
###copy()浅拷贝,将字典A复制到B,并删除B原有元素,当对B进行增删改查的时,A的数据也会发生变化
import copy
dict1 = {'a': 'apple', 'b': 'banana', 'c': 'cat'}
dict2 = {'s':'small', 'b':'big'}
dict2 = dict1.copy() # 拷贝dict1并赋给dict2
print(dict2)
###deepcopy深拷贝,相当于C语言的指针,字典B的改变不会影响到A
import copy
dict1 = {'a': 'apple', 'b': 'banana', 'c': 'cat'}
dict2 = {'s':'small', 'b':'big'}
dict2 = dict1.deepcopy() # 拷贝dict1并赋给dict2
print(dict2)