python数据结构—列表、元组、集合、字典

本文详细介绍了Python中的四种主要数据结构:列表、元组、字典和集合。内容包括它们的创建、操作方法、遍历方式以及统计功能。列表可通过append、insert、extend等方法增删改元素,元组不可变,但可通过切片实现类似操作。字典由键值对组成,支持增删改查,而集合是无序不重复元素的集合,支持交并补运算。这些基础知识对于Python编程至关重要。

python数据结构—列表、元组、字典、集合

1 列表(list)

1.1 列表创建

①方法一:变量名称=[数据1,数据2,…,数据n]
其中数据可以是数字、字符串、列表、字典等。

num = [1,2,3]
fruits = ["apple","pear","banana"]
num_fruits = [[1,2,3],["apple","pear","banana"]]

②列表推导式:list = [i for i in range(n)]
即在列表中嵌套循环结构,也可以加上在后面加上if 条件

#例子
num = [i for i in range(1,4)]#等同于num = [1,2,3]
num1 = [i for i in range(0,10) if i>5]#num1 = [6,7,8,9],0-9中大于5的数
num2 = [[i for i in range(0,3)] for i in range(0,3)]#列表内元素为列表,num2 = [[0, 1, 2], [0, 1, 2], [0, 1, 2]]

③ list转化序列:list(序列)

num = (1,2,3,4)
num2 = list(num)#num2=[1, 2, 3, 4]

1.2 列表操作

1.2.1 增加元素

① 在列表末尾添加新的数据项:列表名.append(数据项)

num = [1,2,3]
num.append(4)#在num中添加4,添加后num = [1,2,3,4]

②在列表任意位置添加数据项:列表名.insert(位置索引,数据项)

num = [1,2,3]
num.insert(1,4)#在列表索引为1的位置加入4,其他元素往后移,添加后num = [1,4,2,3],列表索引从0开始

③ 扩展列表:list.extend(seq)
seq表示序列类型,包括列表、元组、字典等;

num1 = [1,2,3]
num2 = [4,5,6]
num1.extend(num2)#输出:num1 = [1, 2, 3, 4, 5, 6]
1.2.2 删除元素

① 已知要删除元素位置:del 列表名[位置索引]

num = [1,2,3]
del num[1]#删除列表索引为1的元素,之后的元素往前移,删除后num = [1,3]

② 已知元素:列表名.remove(数据项)

num = [1,2,3]
num.remove(1)#删除元素1,之后的元素往前移,删除后num = [2,3]

③ 已知元素位置,将其从列表中取出:列表名.pop(位置索引)

num = [1,2,3]
pop_num = num.pop(1)#弹出列表索引在1的元素,并存储在pop_num中,之后的元素往前移,删除后num = [1,3],pop_num=2

④ 清空列表:list.clear()

num = [1,2,3]
num.clear()#清空列表,执行后列表num=[];于重新赋值[]效果相同
1.2.3 修改列表

指定位置元素可直接等于待改变值,可直接覆盖。

num = [1,2,3]
num[1]= 4#索引位置为1的元素修改为4,修改后num = [1,4,3]
1.2.4 其他列表操作
作用函数说明
按规则排序list.sort() VS sorted(list)sort()是对list的永久排序,sorted(list)不改变原本list顺序;默认参数reverse=False,表示正向排序,reverse=True表示逆序;
列表逆序list.reverse()按原list的顺序逆序排列,不可逆
列表长度len(list)返回列表长度
统计元素个数list.count(x)统计list中数据项x的数量
索引list.index(x)返回list中数据项x的索引
列表复制list.copy()复制列表

1.3 列表遍历

1.3.1 简单遍历

遍历列表通常采用for循环。
① 遍历元素
结构体

for item in item_list:#遍历
	print(item )#操作

例子

item_list = [1,2,3,4]
for item in item_list:#遍历
	print(item )#操作

②遍历索引
结构体

for i in range(len(item_list)):#遍历,range()函数生成0到len(item_list)-1步长为1的数
	print(item_list[i])#操作,依次打印列表内元素

例子

item_list = [1,2,3,4]
for i in range(len(item_list)):#遍历
	print(item_list[i])#操作,依次打印列表内元素

③同时遍历元素和索引

for index, elem in enumerate(item_list):#借助enumerate函数		          
	print(index, elem)#打印列表内索引和元素
1.3.2 切片

切片方法:

list[start_index:end_index]#取出list中索引为start_index到end_index-1部分
list[:end_index]#list中索引为0到end_index-1部分
list[start_index:]#list中索引为start_index之后的部分
list[:]#list所有元素
list[0],list[1]...#list的第一个元素、第二个元素...
list[-1],list[-2]...##list的倒数第一个元素、倒数第二个元素...

例子:

name= ["张三", "李四", "王五", "赵六"]
print(name[1:3])#['李四', '王五']
print(name[1:])#['李四', '王五', '赵六']
print(name[:1])#['张三']
print(name[:])#['张三', '李四', '王五', '赵六']

切片后的数据结构也是列表。

1.4 列表统计

列表内存储数值的统计方法:

功能函数说明
统计元素个数list.count(x)统计list中数据项x的数量
求和sum(list)求列表所有元素之和
均值mean(list)求列表平均值,使用mean()时需要先执行from numpy import *
最小值min(list)求列表最小值
最大值max(list)求列表最大值

2 元组(tuple)

2.1元组创建

①方法一:变量名称=(数据1,数据2,…,数据n)
当只有一个数据时,变量名称=(数据1,),末尾需要加“,”。其中数据可以是数字、字符串、列表、字典等。

num = (1,2,3)
fruits = ("apple","pear","banana")
num_fruits = ([1,2,3],("apple","pear","banana"))

② tuple转化序列:tuple(序列)

num = [1,2,3,4]
num2 = tuple(num)#num2=(1, 2, 3, 4)

③借助列表推导式创建:tuple([i for i in range(x)])

num2 =tuple([i for i in range(4)])#num2=(0, 1, 2, 3)

1.2 元组操作

元组的索引、切片,操作元组的函数index()、count()、len()和数值统计方法,与列表一致,不再赘述。元组是不可以增删改的数据结构,修改元组只能重新创建,但可以借助切片等方式进行增删改。

#增
num1 = (1,2,3)
num_add = (4,5)
num1 = num1 + num_add  #增加元素4和5

#删除
num1 = (1,2,3,4,5)
num1 = num1[:2] + num1[3:]#删除3,num1=[1,2,4,5]

#改
num1 = (1,2,3,4,5)
num1 = num1[:2] + (6,)+num1[3:]#3改为6,num1=[1,2,6,4,5]

3 集合(set)

集合是一个无序的不重复元素序列。

3.1 集合的创建

①方法一:变量名称={数据1,数据2,…,数据n}
当只有一个数据时,变量名称=(数据1,),末尾需要加“,”。其中数据可以是数字、字符串、元组等。

num = {1,2,3}
fruits = {"apple","pear","banana"}

② set转化序列:set(序列)

num = [1,2,3,4]
num2 = set(num)#num2={1, 2, 3, 4}

3.2 集合操作

集合不能遍历索引,但可以遍历元素:

for item in item_set:#遍历
	print(item )#操作

①增加元素:set.add元素)

②删除元素:
删除指定元素:set.discard(指定元素) ;
清空集合:set.clear()

③集合特殊操作:
交集:set1 & set2 #求set1和set2中相同的元素
并集:set1 | set2 #合并set1和set2 ,相同元素只保留一个
补集:set1 - set2 #set1有而set2没有的元素

④其他操作
集合长度:len(set)

4 字典(dict)

4.1 创建字典

字典由键值对组成,字典的键是唯一的,且不可修改的,值可以有重复。键和值成对存在,基本结构是dict1 = {key1 : value1, key2 : value2 …},其中key1表示第一个键,value1表示第一个键对应的值,以此类推。
①键值对:dict = {key1 : value1, key2 : value2 …}或者dict = {key1 = value1, key2 = value2 …}

#学生:分数
score_dict1 = {"张三": 90, "李四": 80, "王五": 70, "赵六": 60}

②字典推导式:dict1 = {i,j for i,j in zip(seq_i,seq_j)}
借助zip函数链接两个序列

#借助zip函数
scores = [90,80,70,60]
names = ["张三", "李四", "王五", "赵六"]
dict1 = {name:score for name,score in zip(names,scores )}# dict={'张三': 90, '李四': 80, '王五': 70, '赵六': 60}

#键值对为某种函数关系时,也可以直接用推导式
dict1 = {i:i**2 for i in range(4)}#{0: 0, 1: 1, 2: 4, 3: 9}

③ fromkeys方法:fromkeys(seq,value)
seq表示一个序列,value是值,缺省时值为None

names = ["张三", "李四", "王五", "赵六"]
dict1 = dict.fromkeys(names)#dict1={'张三': None, '李四': None, '王五': None, '赵六': None}
dict1 = dict.fromkeys(names,100)#dict1= {'张三': 100, '李四': 100, '王五': 100, '赵六': 100}

4.2 遍历字典

字典是可遍历的,但由于字典是无序的,不能通过索引值来遍历。
①访问字典中值的方法是:字典名[字典的键]

score_dict1 = {"张三": 90, "李四": 80, "王五": 70, "赵六": 60}
score_dict1['张三']#查找张三的成绩 90

②遍历字典的键:keys()

score_dict1 = {"张三": 90, "李四": 80, "王五": 70, "赵六": 60}
for key in score_dict1.keys():
    print(key)
#输出
张三
李四
王五
赵六

③遍历字典的值:values()

score_dict1 = {"张三": 90, "李四": 80, "王五": 70, "赵六": 60}
for value in score_dict1.values():
    print(value)
#输出
90
80
70
60

④同时遍历键值对:items()

score_dict1 = {"张三": 90, "李四": 80, "王五": 70, "赵六": 60}
for key,value in score_dict1.items():
    print(key,value)
#输出
张三 90
李四 80
王五 70
赵六 60

4.3 字典增删改

4.3.1 增加键值对

① 字典名[新键]=新值
新键在字典中是不存在的,对于字典中存在的键,字典名[键]=值 是修改原本键对应的值;

score_dict1 = {"张三": 90, "李四": 80, "王五": 70, "赵六": 60}
score_dict1["孙七"] = 100
#添加后score_dict1={'张三': 90, '李四': 80, '王五': 70, '赵六': 60, '孙七': 100}

②将一个字典的内容加到另外一个字典中:dict1.update(dict2)
重复的键不加入。

score_dict1 = {"张三": 90, "李四": 80, "王五": 70, "赵六": 60}
score_dict2 = {"孙七":100}
score_dict1.update(score_dict2)
#score_dict1={'张三': 90, '李四': 80, '王五': 70, '赵六': 60, '孙七': 100}
4.3.2 删除键值对

①按键值删除:del 字典名[键]

score_dict1={'张三': 90, '李四': 80, '王五': 70, '赵六': 60, '孙七': 100}
del score_dict1["孙七"]
#删除后score_dict1 = {"张三": 90, "李四": 80, "王五": 70, "赵六": 60}

②清空字典:字典名.clear()
③指定弹出:字典名.pop(键)
④随机弹出:字典名.popitem()

4.3.3 修改键值对

①字典名[键]=新值

score_dict1 = {"张三": 90, "李四": 80, "王五": 70, "赵六": 60}
score_dict1["赵六"] = 100
#修改后score_dict1= {'张三': 90, '李四': 80, '王五': 70, '赵六': 100}

4.4 其他常用函数

作用函数说明
复制dict.copy()复制字典
获得指定键的值dict.get(key, default=None)返回指定键的值,键不在字典时,返回default值

记录学习过程,欢迎指正

评论 4
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值