本文主要对Python中几种数据存储结构操作进行总结,包括元组,列表,字典和集
元组 Tuple
元组是一个或多个对象引用所组成的有序序列。元组是不可变的,因此,不能删除或替换元组中的元素,若需对其修改,可先将他转换为列表
构造元组
可以使用()创建元组,对于空元组:
empty=()
单个元素元组,需要使用逗号分隔符将与括号表达式进行区分
one=(‘xxxx’,)
two=(11,)
多个元素,当元组中数据个数超过2个且无歧义时,可省略括号
items=’a’,’b’,’c’,’d’
元组可以嵌套使用:
items=((‘a’,1),(‘b’,2),(‘c’,3))
任何序列都可以作为参数传递给元组的构造函数,从而生成一个元组:
items = tuple(‘abcdefg’)
元组操作
元组可以直接使用下标访问
items[1]
对于嵌套元组,可以使用多个方括号访问
items[1][1]
可以使用 : 切片语法,此时元组内容已经改变,得到的元组是切片后的元组。
items[2:]
[2:] 表示获取最后两个元素
items[:2]
[:2] 表示获取前两个元素
items[:-1]
[:-1] 表示去除最后一个元素
可以使用len()函数获取元组长度:
len(items)
列表 List
列表类型是一个与元组类似的有序序列,元组中可以用到的函数和切片操作,列表也同样可以使用。列表与元组不同在于,列表是可变的。
构造列表
创建列表需要使用 [],对于空列表:
items = []
多个元素
items = [‘a’,’b’,’c’,’d’]
列表操作
类似的切片操作:
items[:2]
items[2:]
items[:-1]
可以在指定位置插入单个元素:
items.insert(5,’e’)
使用切片语法插入字符串:
items[4:4] = [‘abcd’]
删除元素:
del items[5]
del: 移除一个特定索引位置的元素
items.remove(‘a’)
remove: 移除一个与remove方法相匹配的元素
items[4:5]=[]
删除第五个元素
列表的常用函数
函数 | 说明 |
---|---|
x in L | x在L中 |
x not in L | x不在L中 |
L+M | 返回含L,M所有元素的列表 |
L.count(x) | L中x出现的次数 |
L.index(x) | L中最早出现x的索引位置 |
L.append(x) | 在L尾端添加x |
L.extend(M) | 将M所有元素添加到L尾端,同”+” |
L.pop() | 弹出L尾端元素 |
L.pop(i) | 弹出L中索引为i的元素 |
L.reverse() | 逆序L中元素 |
L.sort() | 排序 |
字典 dict
字典类型是一个数据字典,可以保存无序的键-值对,键(key)是唯一并且不可变的,可以是字符串、数字、元组。值(value)可以是任何数据类型。
创建字典
创建字典是使用 {key:value}
insects = {‘a’:1,’b’:2,’c’:3}
insects[‘d’]=4
或者使用函数dict():
insects = dict(a=1,b=2,c=3)
操作
删除操作和列表相同:
del insects[‘a’]
insects.pop(‘b’)
字典的常用函数
函数 | 说明 |
---|---|
x in L | x在L中 |
x not in L | x不在L中 |
L.clear() | 清空字典 |
L.copy() | 浅复制 |
L.keys() | 返回L中所有键 |
L.values() | 返回L中所有值 |
L.items() | 返回L中所有键值对 |
L.pop(k) | 弹出L中键k的值,不存在时抛出异常 |
L.pop(k,x) | 弹出L中键k的值,不存在时返回x |
L.get(k) | 返回L中键k的值,不存在返回None |
L.get(k,x) | 返回L中键k的值,不存在返回x |
L.setdefault(k.x) | k在L中,将键k的值设为x,否则插入{k:x}键值对 |
集 set
python有两种集:集(set)和原封集(frozenset),两者都是无序的,不同在于,集是可变的,可以对其中元素进行插入删除操作,原封集更时候做字典的键。
集和列表区别在于,集中的元素是唯一的,对集插入已存在的元素,集不会改变,而列表会保留元素插入的顺序。当两个集中所有元素都相同时,这两个集时相等的。
创建集
s = set(‘a’,’b’,’c’)
操作
添加
s.add(‘d’)
删除
s.remove(‘a’)
s.discard(‘a’)
并
s|t
s.union(t)
交
s&t
s.interperset(t)
差
s-t
s.difference(t)
子集
s<=t #若s是t的子集,返回true
s.issubset #若s是t的子集,返回true
s>=t #若s时t的超集,返回true