python中的数据结构主要有:
列表 List
元组tuple
字典 dict
集合set
1.列表List
列表是最常用的Python数据类型,列表的数据项不需要具有相同的类型。列表中的每个元素都分配一个数字 - 它的位置,或索引,第一个索引是0,第二个索引是1,依此类推。
对列表的操作:
创建列表
list1 = ['physics', 'chemistry', 1997, 2000] list2 = [1, 2, 3, 4, 5 ] list3 = ["a", "b", "c", "d"] list4=[randint(-10,10) for _ in range(10)]#_表示一个零时变量,for后面这部分其实就是表示生成是个元素,每次是从-10到10的一个随机整数作为这个list的元素。 list5=[x for x in range(1,15,3)]
运行结果
['physics', 'chemistry', 1997, 2000] [1, 2, 3, 4, 5] ["a", "b", "c", "d"] [-7, -6, 4, 1, -3, 4, 9, -8, -9, -8] [1, 4, 7, 10, 13]
访问列表中元素的值
list1 = [1, 2, 3, 4, 5, 6, 7 ] print(list1[0]) print(list1[1:5])
运行结果:
1 [2, 3, 4, 5]
更新列表
可以通过列表的索引直接修改元素,也可以通过append()方法来给列表添加元素
list = ['physics', 'chemistry', 1997, 2000] list[2]='3000'#直接修改列表元素 list.append('new element') list
运行结果:
['physics', 'chemistry', ‘3000’, 2000, 'new element']
删除列表元素
list1 = ['physics', 'chemistry', 1997, 2000] del list1[2]#删除第三个元素 list1
运行结果
['physics', 'chemistry', 2000]
列表操作包含以下函数:
- cmp(list1, list2):比较两个列表的元素
- len(list):列表元素个数
- max(list):返回列表元素最大值
- min(list):返回列表元素最小值
- list(seq):将元组转换为列表
列表操作包含以下方法:
- list.append(obj):在列表末尾添加新的对象
- list.count(obj):统计某个元素在列表中出现的次数
- list.extend(seq):在列表末尾一次性追加另一个序列中的多个值(用新列表扩展原来的列表)
- list.index(obj):从列表中找出某个值第一个匹配项的索引位置
- list.insert(index, obj):将对象插入列表
- list.pop(obj=list[-1]):移除列表中的一个元素(默认最后一个元素),并且返回该元素的值
- list.remove(obj):移除列表中某个值的第一个匹配项
- list.reverse():反向列表中元素
- list.sort([func]):对原列表进行排序
2、元组
元组的学习一般是和列表做对比学习的,元组的格式相比于列表变成了小括号。
学习元组主要注意一下问题:
元组不可变性:
a = (1,2)
a[0] = 2 会报错TypeError: ‘tuple’ object does not support item assignment。
a = (1,2,[1,2,3])
a [2][1] = 0 是可以的
元组的不可变性是指元组的元素指向的数据不可变。所以tuple不变的是指向,指向什么就一直是什么,不能改变。
元组的相加:
a=(1,2,3,4) id(a) b=(3,4,5) a=a+b id(a) a
运行结果:
120091534616 120120326072 (1, 2, 3, 4, 5, 3, 4, 5)
这里两次输出a的id不相同,说明他们是不同的对象,刚开始a=(1,2,3,4),后面讲a+b组合的一个元组重新赋值给a,不是a变了,原来的那个元组也没有变,只是没有了引用,最后会被当做垃圾回收。
元组的删除:
tup = (1,2,3,4);
del tup[0];
此时会报错TypeError: ‘tuple’ object doesn’t support item deletion
元组访问及切片:
a = (1,2,[3,4])
a[0]指向1,a[2][1]指向4
a[:1]指向一个子元组(1,2)
元组操作
- cmp(tuple1, tuple2):比较两个元组元素。
- len(tuple):计算元组元素个数。
- max(tuple):返回元组中元素最大值。
- min(tuple):返回元组中元素最小值。
- tuple(seq):将列表转换为元组。
cmp(),len(),min(),max()都是序列的内置函数,tuple也是序列,所以可以用内置函数操作。tuple()是工厂函数。
3、字典
字典是另一种可变容器模型,且可存储任意类型对象。
具有以下特点:
- 元素由键(key)和值(value)组成
- 可以用dict()函数或者方括号()创建,元素之间用逗号’,‘’分隔,键与值之间用冒号”:”隔开
- 键必须是唯一的,但值则不必。值可以取任何数据类型,但键必须是不可变的,如字符串,数字或元组
- 使用键(key)来访问元素
# 用dict()函数创建 dict1 = dict([('name', 'kyda'), ('e', 10)]) # 用{}创建 dict2 = {'name': 'lin', 'age': 21} print(dict1) # 使用键(key)来访问元素 print(dict2['name']) # 使用键(key)来访问元素,并修改元素的值 dict2['age'] = 23 print(dict2)
结果:
{'name': 'kyda', 'age': 10} lin {'name': 'lin', 'age': 23}
字典的方法:
4、集合
具有以下特点:
- 可以用set()函数或者方括号{}创建,元素之间用逗号”,”分隔。
- 与字典相比少了键
- 不可索引,不可切片
- 不可以有重复元素
# 两种方法创建 set1 = set('kydaa') set2 = {'abc', 'jaja', 'abc', 'kyda'} print(set1) print(set2)
结果:自动将重复元素去除
{'a', 'y', 'd', 'k'} {'jaja', 'abc', 'kyda'}
关系测试:
>>> x = {1,2,3,4} >>> y = {3,4,5,6} >>> x & y #交集 set([3, 4]) >>> x | y #并集 set([1, 2, 3, 4, 5, 6]) >>> x - y #差集,x有但是y没有的 set([1, 2]) >>> x ^ y #对称差集 set([1, 2, 5, 6])
集合的方法: