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





