数据结构概述
数据在内存中存储的形式,称之为数据结构。
在Python中内置的三种常用数据结构:列表 (list )、元组( tuple )和 字典(dict ),这三种数据结构,都可用于保存多个数据项。
这对于编程而言是非常重要的, 因为程序不仅需要使用单个变量来保存数据,还需要使用多种数据结构来保存大量数据,
而列表、元组和字典就可满足保存大量数据的需求。
列表和元组比较相似,它们都按顺序保存元素, 每个元素都有自己的索引,因此列表和元组都可通过索引访问元素 。
二者的区别在于元组是不可修改的,但列表是可修改的,字典则以 key - value的形式保存数据。
这三种数据结构各有特色,它们都是 Python编程中必不可少的内容。
创建列表和元组
创建列表和元组的语法也有点相似,区别只是创建列表使用方括号[ ], 创建元组使用圆括号()
mylist = ['kobe', 23, 'teacher']
print(mylist)
mytuple = ('kobe', 23, 'teacher')
print(mytuple)
列表和元组通用方法
列表和元组非常相似,它们都可以包含很多元素,多个元素也是各自有各自的索引,程序可以通过索引来操作这些元素,
只要不涉及改变元素的操作,列表和元组的用法是通用的。
索引操作元素
列表和元组都可以通过索引来访问元素,它们索引都是从0开始的,第一个元素索引是0,第二个元素索引是1,以此类推。
它们支持负数索引,倒数第一个元素索引是-1,倒数第二个元素索引是-2,依次类推。
a_tuple = ('teacher', 23, 5.6, 'kobe', -12)
print(a_tuple)
print(a_tuple[0])
print(a_tuple[-1])
加法
列表和元组支持加法运算,加法的和就是两个列表和元组所包含的元素的总和。
注意:列表只能和列表相加,元组只能和元组相加,元组不能和列表相加。
a_tuple = ('kobe', 12, 13, 'teacher')
b_tuple = ('bryant', 14, 15, 'student')
sum_tuple = a_tuple + b_tuple;
print(sum_tuple)
a_list = [1,2,3]
b_list = [4,5,6]
sum_list = a_list + b_list
print(sum_list)
乘法
列表和元组可以和整数执行乘法运算,列表和元组乘法的意义就是把它们包含的元素重复N次,N就是被乘的倍数。
a_tuple = ('hello', 123)
mul_tuple = a_tuple * 3
print(mul_tuple)
a_list = [20, 30, 'kobe']
mul_list = a_list * 3
print(mul_list)
in运算符
in运算符用于判断列表或元组是否包含某个元素。
a_tuple = ('kobe', 20, 1.2)
print(20 in a_tuple)
print(21 in a_tuple)
print(21 not in a_tuple)
全局内置函数
Python提供了内置的全局函数,len()、max()、min()、等来获取列表或元组的长度,最大值,最小值。
a_tuple = (12, -34, 67, 34, 100)
print(max(a_tuple))
print(min(a_tuple))
print(len(a_tuple))
序列封包/解包
-
序列封包(Sequence Packing)
-
程序把多个值赋给一个变量,Python会主动将多个值封装成元组
-
-
序列解包(Sequence Unpacking)
-
程序允许把列表或元组直接赋值给多个变量,此时序列各元素会被依次赋值给每个变量,(但要求序列个数和变量个数相等)
-
# 序列封包
vals = 10, 20, 30
print(vals)
print(type(vals))
# 序列解包
aTuple = (10, 20, 30)
a, b, c = aTuple
print(a, b, c)
# 同时序列封包和序列解包
a, b, c = 10, 20, 30
print(a, b, c)
# 变量的交换
a = 1
b = 2
a, b = b, a
print(a, b)
列表和元组的操作
列表和元组的转换
-
我们可以利用 list() 函数和 tuple() 函数实现列表和元组之间的转换
列表转元组
aList = [10, 20, 30]
aTuple = tuple(aList)
print(aTuple)
# 元组转列表
aTuple = (10, 20, 30)
aList = list(aTuple)
print(aList)
创建列表和元组
-
除了直接使用[1,2,3 ] 和 (1,2,3 ) 的形式直接创建列表或者元组之外,我们也可以使用range() 区间函数实现列表和元组的创建
# 定义区间函数
aRange = range(1, 5)
print(aRange)
print(type(aRange))
# 区间函数转列表
aRange = list(aRange)
print(aRange)
print(type(aRange))
# 区间函数转元组
aRange = tuple(aRange)
print(aRange)
print(type(aRange))
列表添加元素
-
append方法可以接受单个值,也可以接受元组、列表等
-
extend方法可以将参数元组、列表中每个元素分别添加到列表或元组中
aList = [10, 20]
aList.append(30)
aList.append([40, 50])
print(aList)
aList.extend([60])
aList.extend([60, 70])
print(aList)
插入元素
-
insert方法,需要指定改元素插入列表的位置
aList = [10, 20, 30]
aList.insert(1, 15)
print(aList)
删除元素
-
del关键字可以根据索引删除列表元素
-
remove函数可以根据元素删除列表元素
-
clear函数可以清空列表中所有元素
# 根据索引删除
aList = [1, 2, 3, 4, 5]
del aList[2]
print(aList)
del aList[1:3]
print(aList)
# 根据元素删除
aList = [1, 2, 3, 4, 5]
aList.remove(2)
print(aList)
# 清空列表
aList = [1, 2, 3, 4, 5]
aList.clear()
print(aList)
修改元素
-
使用索引运算符指定索引号修改列表元素
aList = [1, 2, 3, 4, 5]
aList[0] = 10
print(aList)
列表和元组其它用法
-
count():统计某个元素在列表或元组中出现的次数
-
index():判断某个元素在列表或元组中出现的位置
-
reverse():对列表或元组中元素反转
-
sort():对列表或元组中元素进行排序
aList = [10, 20, 30, 20, 40, 50]
print(aList.count(20))
print(aList.index(20))
print(aList.index(20, 2, 4))
aList = [1, 2, 3, 4, 5]
aList.reverse()
print(aList)
aList = [1, 6, 3, 9, 2, 5]
aList.sort()
print(aList)
字典
字典概述
-
字典主要存放的是具有映射关系的数据
-
如果把学员和成绩分别放在两个表,那没办法记录这两组数据之间的关系了,所以需要放到一起
-
字典相当于保存了两组数据,一组是key,另一组是value。通过key来访问value。因此key是不允许重复的
创建字典
-
使用花括号语法创建字典
-
花括号中应包含多个 key-value 对
-
key和value 之间用英文冒号隔开,key-value之间用英文逗号隔开
scores = {'语文': 99, '数学': 89, '英语': 93}
print(scores)
myDic = {}
# 使用dict函数创建字典
myDic = dict(a=1, b=2)
print(myDic)
# 使用元组来创建 字典
myDic = [('a', 1), ('b', 2)]
myDic = dict(myDic)
print(myDic)
字典基本用法
-
根据key访问字典的值
-
根据key修改字典的值
-
新增字典的值
-
根据key删除字典的值
-
使用in、 not in判断字典中是否包含指定key,对于dict而言,只能对key进行判断
一定要牢记key是字典的关键数据,一切基本操作都是基于key来实现的
scores = {'语文': 99, '数学': 89, '英语': 93}
# 根据key访问字典的值
print(scores['语文'])
# 根据key修改字典的值
scores['语文'] = 100
# 新增字典的值,字典允许直接对不存在的key赋值
scores['python'] = 100
# 根据key删除字典的值
del scores['python']
# 使用in、 not in判断字典中是否包含指定key,对于dict而言,只能对key进行判断
print('语文' in scores)
print('语文' not in scores)
字典的注意事项
-
字典中的key是唯一的,不可以重复
-
字典中的key数据类型可以是元组、常量等不可变的数据类型,key不可以是列表或者其它可变的数据类型
-
字典中的key是不可变的
# 字典中的key是唯一的
scores = {'语文': 99, '语文': 89, '英语': 93}
print(scores)
# 字典中的key是不可变的
scores = {(10): 99, '语文': 89}
print(scores)
print(scores[(10)])
scores = {[10]: 99, '语文': 89}
print(scores)
字典常用方法
-
clear()
-
get()
-
update()
-
pop()
-
popitem()
-
keys()、values()、Items()
clear
clear用于清空字典中所有的键值对,对字典执行 clear方法之后,该字典就会变成一个空字典。
get
get 方法其实就是根据 key 来获取 value, 相当于方括号语法的增强版, 当使用方括号语法访问并不存在 key ,字典会引发 KeyError,但如果使用 get()方法访问不存在的 key,该方法会简单地返回 None ,不会导致错误
scores = {'语文': 99, '数学': 89, '英语': 93}
print(scores.get('语文'))
print(scores.get('语文1'))
print(scores['语文1'])
update
update方法可使用一个字典所包含的 key-value来更新己有的字典,在执行update()方法时,如果被更新的字典中已包含对应 key-value 那么原 value 会被覆盖 ,如果被更新的字典中不包含 key-value对, key-value 会被添加进去。
scores = {'语文': 99, '数学': 89, '英语': 93}
scores.update({'语文': 100})
scores.update({'语文': 100, '物理': 78})
print(scores)
pop
用于获取指定key和value,并删除这个键值对
scores = {'语文': 99, '数学': 89, '英语': 93}
scores.pop('语文')
print(scores)
popitem
Python 字典 popitem() 方法返回并删除字典中的最后一对键和值。
他每次弹出的都是字典最后一个键值对,因为字典在存储key-value对的顺序是不可知的。
scores = {'语文': 99, '数学': 89, '英语': 93}
scores.popitem()
print(scores)
# 由于popitem返回的是一个元组 所以可以通过序列解包方式 给变量赋值
k, y = scores.popitem()
print(k, y)
Items()、keys()、values()
keys()、values()、items()、分别用于获取字典中的所有的key、所有value、 key-value对
这三个方法依次返dict_keys、 dict_values、dict_items、对象, Python不希望用户直接操作它们,但可以list函数把它们转换成列表
scores = {'语文': 99, '数学': 89, '英语': 93}
# 获取字典中所有的key
keys = scores.keys()
print(type(keys))
print(list(keys))
# 获取字典中所有value
values = scores.values()
print(type(values))
print(list(values))
# 获取字典中所有的键值对
items = scores.items()
print(type(items))
print(dict(items))