Python数据结构

数据结构概述

数据在内存中存储的形式,称之为数据结构。

在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)) 

序列封包/解包

  1. 序列封包(Sequence Packing)

    1. 程序把多个值赋给一个变量,Python会主动将多个值封装成元组

  2. 序列解包(Sequence Unpacking)

    1. 程序允许把列表或元组直接赋值给多个变量,此时序列各元素会被依次赋值给每个变量,(但要求序列个数和变量个数相等)

# 序列封包
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)

列表和元组的操作

列表和元组的转换

  1. 我们可以利用 list() 函数和 tuple() 函数实现列表和元组之间的转换

 列表转元组
aList = [10, 20, 30]
aTuple = tuple(aList)
print(aTuple)

# 元组转列表
aTuple = (10, 20, 30)
aList = list(aTuple)
print(aList)

创建列表和元组

  1. 除了直接使用[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))

列表添加元素

  1. append方法可以接受单个值,也可以接受元组、列表等

  2. extend方法可以将参数元组、列表中每个元素分别添加到列表或元组中

aList = [10, 20]
aList.append(30)
aList.append([40, 50])
print(aList)

aList.extend([60])
aList.extend([60, 70])
print(aList)

插入元素

  1. insert方法,需要指定改元素插入列表的位置

aList = [10, 20, 30]
aList.insert(1, 15)
print(aList)

删除元素

  1. del关键字可以根据索引删除列表元素

  2. remove函数可以根据元素删除列表元素

  3. 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)

修改元素

  1. 使用索引运算符指定索引号修改列表元素

aList = [1, 2, 3, 4, 5]
aList[0] = 10
print(aList)

列表和元组其它用法

  1. count():统计某个元素在列表或元组中出现的次数

  2. index():判断某个元素在列表或元组中出现的位置

  3. reverse():对列表或元组中元素反转

  4. 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)

字典

字典概述

  1. 字典主要存放的是具有映射关系的数据

  2. 如果把学员和成绩分别放在两个表,那没办法记录这两组数据之间的关系了,所以需要放到一起

  3. 字典相当于保存了两组数据,一组是key,另一组是value。通过key来访问value。因此key是不允许重复的

创建字典

  1. 使用花括号语法创建字典

  2. 花括号中应包含多个 key-value 对

  3. 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)

字典基本用法

  1. 根据key访问字典的值

  2. 根据key修改字典的值

  3. 新增字典的值

  4. 根据key删除字典的值

  5. 使用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)

字典的注意事项

  1. 字典中的key是唯一的,不可以重复

  2. 字典中的key数据类型可以是元组、常量等不可变的数据类型,key不可以是列表或者其它可变的数据类型

  3. 字典中的key是不可变的

# 字典中的key是唯一的
scores = {'语文': 99, '语文': 89, '英语': 93}
print(scores)

# 字典中的key是不可变的
scores = {(10): 99, '语文': 89}
print(scores)
print(scores[(10)])

scores = {[10]: 99, '语文': 89}
print(scores)

字典常用方法

  1. clear()

  2. get()

  3. update()

  4. pop()

  5. popitem()

  6. 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))

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Gao_xu_sheng

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值