导图社区 python序列的应用
这是一篇关于python序列的应用的思维导图,主要内容包括:其他,语法,区别,集合,字典,元组,列表,序列。
编辑于2024-12-26 23:13:34python序列的应用
序列
索引
通过索引可以找到相应的内容
规则
从0开始
可以是负数
从右向左计数
切片
访问一段序列
语法
序列名[开始:结束:步数]
sname[start:end:step]
end不包括在内
相加
两个序列必须是相同的
不能是列表和元组相加
不会去掉重复的元素
相乘
只是把内容重复几遍
不是真的相乘
某个元素是否在序列内
元素 in 序列
value in sequence
元素 not in 序列
是否不在这个序列内
长度、最大值、最小值
长度
len()
最大值
max()
最小值
min()
其他函数
sum()
计算元素和
sorted
对元素进行排序
reversed
反向序列中的元素
enumerate
将序列组合为一个索引序列
多在for循环中
列表
用[]
表示
用,
间隔
创建和删除
创建
赋值运算符
listname = [element1,element2```````elementn]
空列表
列表名称 = []
list()
str1 = '千山鸟飞绝' str2 = '万径人踪灭' str3 = '孤舟蓑笠翁' str4 = '独钓寒江雪' verse = [list(str1),list(str2),list(str3),list(str4)]
[['千', '山', '鸟', '飞', '绝'], ['万', '径', '人', '踪', '灭'], ['孤', '舟', '蓑', '笠', '翁'], ['独', '钓', '寒', '江', '雪']]
字符串
a = 10,20,30 i = list(a) print(i)
[10, 20, 30]
a = '自我','自由' i = list(a) print(i)
['自我', '自由']
a = '自我' i = list(a) print(i)
['自', '我']
如果是单个字符串的,列表是会被拆开的
数值列表
list(可以转换为列表的数据)
list(range(10,20,2))
[10,12,14,16,18]
删除
del 列表名字
访问列表元素
print()
直接输出
用索引
print(列表名称[索引])
a = [1,2,3,4,5,6,7,8,9] print(a[3])
4
因为索引是从0开始的
用切片
print(列表名称[开始:结束])
a = [1,2,3,4,5,6,7,8,9] print(a[2:4])
[3, 4]
因为切片最后一个不包括在内
遍历列表
把列表中所有元素访问一遍
for循环
for 被赋值 in 列表名称
a = [1,2,3,4,5,6,7,8,9] for i in a: print(i,'咖啡',end="")
123456789
只显示元素,不显示列表
记得缩进量
end=""
要求横向排列
a = [1,2,3,4,5,6,7,8,9] print(a,'咖啡',end='')
[1, 2, 3, 4, 5, 6, 7, 8, 9] 咖啡
a = [1,2,3,4,5,6,7,8,9] for i in a: print(i,'咖啡',end='')
1 咖啡2 咖啡3 咖啡4 咖啡5 咖啡6 咖啡7 咖啡8 咖啡9 咖啡
直接用print输出就会输出一整个列表,不会在每一个元素后面加元素
与enumerate()结合
enumerate()
可以同时返回索引和元素
for X,Y in enumerate(列表名称)
fruits = ['apple', 'banana', 'cherry'] for index, fruit in enumerate(fruits): print(index, fruit)
0 apple 1 banana 2 cherry
添加、修改、删除元素
添加元素
append()
列表名称.append('元素')
fruits = ['apple', 'banana', 'cherry'] fruits.append('orange') print(fruits)
['apple', 'banana', 'cherry', 'orange']
添加时需要加字符串
如果是多个列表那么可以在列表名称后+[索引].append(元素)进行添加
fruits = ['apple'], ['banana'], ['cherry'] fruits[1].append('orange') print(fruits)
fruits = ['apple'], ['banana'], ['cherry'] fruits[1].append('orange') print(fruits)
所以必须用[]
不能用()
insert()
指定位置添加
列表名称.insert(索引号,'元素')
fruits = ['apple', 'banana', 'cherry'] fruits.insert(2,'orange') print(fruits)
['apple', 'banana', 'orange', 'cherry']
在索引号之前添加
fruits = ['apple', 'banana', 'cherry'] b = [1,2,3,] fruits.insert(2,b) print(fruits)
['apple', 'banana', [1, 2, 3], 'cherry']
也可以制定位置添加列表
但出现的是两个列表
extend()
添加一个列表
列表名称.extend(添加列表名称)
fruits = ['apple', 'banana', 'cherry'] b = [1,2,3,] fruits.extend(b) print(fruits)
['apple', 'banana', 'cherry', 1, 2, 3]
修改元素
通过索引获取元素
重新赋值
删除元素
del 列表名称[索引]
verse=['1','2','3'] del verse[1] print(verse)
['1','3']
如果不确定位置
列表名称.remove()
verse=['1','2','3'] verse.remove('2') print(verse)
['1','3']
如果不确定是否存在
if verse.count(2) > 0
在verse列表中,2大于0个
count:计数,按顺序数数
统计和计算
制定元素出现的次数
列表名称.count(元素)
索引值
index()
列表名称.index(元素)
verse = ['色粉色粉','色粉色发色法','色粉各分管','色粉色发色法'] a = verse.index('色粉色发色法') print(a)
1
只显示首次出现的索引
统计元素和
sum(列表名称,start)
start没有指令就代表为全部
nums = [1, 2, 3, 4, 5] total = sum(nums) print(total)
1 + 2 + 3 + 4 + 5 = 15
是start+列表中所以说的和
nums = [1, 2, 3, 4, 5] total = sum(nums, 10) print(total)
10 + 1 + 2 + 3 + 4 + 5 = 25
排序
sort()
列表名称.sort(key=None,reverse=False)
key=None
指定排序规则
key=lower
不区分大小写
reverse
可选择的
True
降序
grade = [98,97,56,48,67,84,94,34,41] print(grade) grade.sort(reverse=True) print(grade)
[98, 97, 56, 48, 67, 84, 94, 34, 41] [98, 97, 94, 84, 67, 56, 48, 41, 34]
False
升序
sort()
不指定
升序
grade = [98,97,56,48,67,84,94,34,41] print(grade) grade.sort(reverse=False) print(grade) grade.sort() print(grade)
[98, 97, 56, 48, 67, 84, 94, 34, 41] [34, 41, 48, 56, 67, 84, 94, 97, 98] [34, 41, 48, 56, 67, 84, 94, 97, 98]
真降,假升,不说也升
sorted()
sorted(列表名称,key=None,reverse=False)
与sort()区别
sorted()排序后,源列表保持不变
grade = [98,97,56,48,67,84,94,34,41] grade1 = sorted(grade) grade2 = sorted(grade,reverse=True) print(grade) print(grade1) print(grade2)
[98, 97, 56, 48, 67, 84, 94, 34, 41] [34, 41, 48, 56, 67, 84, 94, 97, 98] [98, 97, 94, 84, 67, 56, 48, 41, 34]
因为原列表保持不变,所以排序后要赋值在一个新列表里
列表名称必须放在括号里面
推导式
快速生成一个表格
生产指定范围的数值列表
list = [表达式 for 变量 in range]
import random a = [random.randint(10,100) for i in range(10)] print(a)
[77, 79, 80, 78, 31, 52, 37, 84, 93, 31]
这里range(10)为循环10次,从0-9也是属于10次
根据列表生成指定列表
list = [表达式 for 标量 in 原列表]
grade = [98,97,56,48,67,84,94,34,41] grade1 = [x*0.5 for x in grade] print(grade1)
[49.0, 48.5, 28.0, 24.0, 33.5, 42.0, 47.0, 17.0, 20.5]
打一半折
从列表中选择符合条件的生产新列表
list = [变量 for 变量 in 原列表 if 条件]
变量和变量必须是一样的
grade = [98,97,56,48,67,84,94,34,41] grade1 = [i for i in grade if i>=67] print(grade) print(grade1)
[98, 97, 56, 48, 67, 84, 94, 34, 41] [98, 97, 67, 84, 94]
二维列表的应用
就像酒店的房间号
属于立体的结构
如1101:第一层,第一个房间 2105:第二层,第五个房间
用行列表示
第一下标
所在行
第二个下标
所在列
使用嵌套的for循环创建
room = [] for i in range(1,5): room.append([]) for j in range(1,11): room[i-1].append(i * 1000 + 100 + j) print(room)
[[1101, 1102, 1103, 1104, 1105, 1106, 1107, 1108, 1109, 1110], [2101, 2102, 2103, 2104, 2105, 2106, 2107, 2108, 2109, 2110], [3101, 3102, 3103, 3104, 3105, 3106, 3107, 3108, 3109, 3110], [4101, 4102, 4103, 4104, 4105, 4106, 4107, 4108, 4109, 4110]]
因为room[]
是表示索引
索引从0开始,所以要-1
使用推导式创建
room = [[i*1000+100+j for j in range(1,11)] for i in range(1,5)] print(room)
[[1101, 1102, 1103, 1104, 1105, 1106, 1107, 1108, 1109, 1110], [2101, 2102, 2103, 2104, 2105, 2106, 2107, 2108, 2109, 2110], [3101, 3102, 3103, 3104, 3105, 3106, 3107, 3108, 3109, 3110], [4101, 4102, 4103, 4104, 4105, 4106, 4107, 4108, 4109, 4110]]
中间加一个[]是因为需要分开列表,[i*1000+100+j for j in range(1,11)]相当于在大列表下的小列表
room = [i*1000+100+j for j in range(1,11) for i in range(1,5)] print(room)
[1101, 2101, 3101, 4101, 1102, 2102, 3102, 4102, 1103, 2103, 3103, 4103, 1104, 2104, 3104, 4104, 1105, 2105, 3105, 4105, 1106, 2106, 3106, 4106, 1107, 2107, 3107, 4107, 1108, 2108, 3108, 4108, 1109, 2109, 3109, 4109, 1110, 2110, 3110, 4110]
就会变成1个列表
元组
与列表类似
不可变序列
用()表示,用,分隔
创建和删除
赋值运算符
listname = (element1,element2```````elementn)
与列表类似
创建空元组
()
tuple()
字符串
b = 10,20,30,40,50 a = tuple(b) print(a)
(10, 20, 30, 40, 50)
a = '自我','自由' i = tuple(a) print(i)
['自我', '自由']
a = '自我' i = tuple(a) print(i)
['自', '我']
如果是单个字符串的,列表是会被拆开的
str1 = '千山鸟飞绝' str2 = '万径人踪灭' str3 = '孤舟蓑笠翁' str4 = '独钓寒江雪' verse = (tuple(str1),tuple(str2),tuple(str3),tuple(str4))
(('千', '山', '鸟', '飞', '绝'), ('万', '径', '人', '踪', '灭'), ('孤', '舟', '蓑', '笠', '翁'), ('独', '钓', '寒', '江', '雪'))
数值代码
tuple(range())
tuple(range(10,20,2))
(10, 12, 14, 16, 18)
如果新开程序
a = tuple(range(10,20,2)) print(a)
(10, 12, 14, 16, 18)
删除
del 元组名
访问元素
和列表一样用索引
print()
直接输出
索引键也是[]
也可以用切片
遍历列表
把列表中所有元素访问一遍
for循环
for 被赋值 in 列表名称
a = (1,2,3,4,5,6,7,8,9) for i in a: print(i,'咖啡',end="")
123456789
只显示元素,不显示列表
记得缩进量
end=""
要求横向排列
a = (1,2,3,4,5,6,7,8,9) print(a,'咖啡',end='')
(1, 2, 3, 4, 5, 6, 7, 8, 9) 咖啡
a = (1,2,3,4,5,6,7,8,9) for i in a: print(i,'咖啡',end='')
1 咖啡2 咖啡3 咖啡4 咖啡5 咖啡6 咖啡7 咖啡8 咖啡9 咖啡
直接用print输出就会输出一整个列表,不会在每一个元素后面加元素
与enumerate()结合
enumerate()
可以同时返回索引和元素
for X,Y in enumerate(列表名称)
fruits = ('apple', 'banana', 'cherry') for index, fruit in enumerate(fruits): print(index, fruit)
0 apple 1 banana 2 cherry
修改元素
不能像列表一样随意修改
如
通过索引获取元素
重新赋值
但可以
对元组进行重新赋值
修改
fruits = ('apple', 'banana', 'cherry') fruits = ('apple','sdfsef','cherrt') print(fruits)
('apple', 'sdfsef', 'cherrt')
增加
fruits = ('apple', 'banana', 'cherry') fruits = fruits+('48941','51') print(fruits)
('apple', 'banana', 'cherry', '48941', '51')
元组推导式
[]修改为()
生产指定范围的数值列表
tuple = (表达式 for 变量 in range)
import random a = (random.randint(10,100) for i in range(10)) print(a)
这里range(10)为循环10次,从0-9也是属于10次
<generator object <genexpr> at 0x000001B4BB4B52A0>
会出现生成器对象
可以用tuple()转换
import random a = (random.randint(10,100) for i in range(10)) a = tuple(a) print(a)
(13, 40, 11, 12, 79, 87, 86, 36, 52, 49)
number = (i for i in range(3)) print(number.__next__()) #输出第1个元素 print(number.__next__()) #输出第2个元素 print(number.__next__()) #输出第3个元素 number = tuple(number) #转换为元组 print(number)
0 1 2 ()
()因为之前访问过了,所以生成器里的内容就没有了,元组就变空了
根据列表生成指定列表
tuple = (表达式 for 标量 in 原列表)
grade = (98,97,56,48,67,84,94,34,41) grade1 = (x*0.5 for x in grade) grade1 = tuple(grade1) print(grade1)
[49.0, 48.5, 28.0, 24.0, 33.5, 42.0, 47.0, 17.0, 20.5]
打一半折
从列表中选择符合条件的生产新列表
tuple = (变量 for 变量 in 原列表 if 条件)
变量和变量必须是一样的
grade = (98,97,56,48,67,84,94,34,41) grade1 = (i for i in grade if i>=67) grade1 = tuple(grade1) print(grade1)
[98, 97, 67, 84, 94]
区别
元组比列表访问和处理速度快
列表不能作为字典的键
而元组可以
字典
以“键-值对”的形式存在
通过键,而不是通过索引来读取
是任意对象的无序集合
创建和删除
创建
赋值运算符
dictionary = {‘key1:value1’,'key2:value2','key3:value3'············'keyn:valuen'}
键是唯一的,不可变
值是任何数据,可以改变
空字典
字典名称 = {}
dict()
通过映射函数创建字典
需要zip()函数
zip():用于将多个列表或元组或普通字符串的元素组合为元组
a = 1,2,3,4 b = 'sdfaf','sdfwef','sefsf','sdfsd' c = dict(zip(a,b)) print(c)
{1: 'sdfaf', 2: 'sdfwef', 3: 'sefsf', 4: 'sdfsd'}
a = 1,2,3,4 b = 'sdfaf','sdfwef','sefsf','sdfsd' c = dict(a,b) print(c)
系统报错
通过给定的关键字创建字典
a = dict(a='dafda',b='dafafd',c='grgagr') print(a)
{'a': 'dafda', 'b': 'dafafd', 'c': 'grgagr'}
但key不能用数字,用数字需要加''变为字符串
dict.fromkeys()
创建一个只有键的空字典
a = 1,2,3,4,5 b = dict.fromkeys(a) print(b)
{1: None, 2: None, 3: None, 4: None, 5: None}
删除
del 字典名称
clear()
字典名称.clear()
变成空字典,但不删除
也可以用在列表、元组中
访问字典
通过键值访问
get()
字典名字.get(键值,default)
default:当键值不存在时,返回的默认值
可以不写,默认None
a = {'a':'561561','c':'15615','g':'516516'} print(a.get('a','不在'))
561561
在get()中的两个位置,都必须是带字符号的
print字典名称[键值])
遍历字典
items()
获取键-值对
字典名字.items()
a = {'a':'561561','c':'15615','g':'516516'} for i in a.items(): print(i)
('a', '561561') ('c', '15615') ('g', '516516')
也可以用for X,Y in a.items():
获得单独的键和值
添加、修改
字典名字[键] = 元素
添加
a = {'a':'561561','c':'15615','g':'516516'} a['d'] = '1565131' print(a)
{'a': '561561', 'c': '15615', 'g': '516516', 'd': '1565131'}
如果存在则为修改功能
a = {'a': '561561', 'c': '15615', 'g': '516516', 'd': '1565131'} a['d'] = '594947' print(a)
{'a': '561561', 'c': '15615', 'g': '516516', 'd': '594947'}
删除
del 字典名称[键位]
a = {'a': '561561', 'c': '15615', 'g': '516516', 'd': '1565131'} del a['g'] print(a)
{'a': '561561', 'c': '15615', 'd': '1565131'}
字典推导式
和其他推导式相同只是换乘了{}
用两个已知的生成
a = 'a','b','c','d' b = '561561', '15615', '516516','1565131' c = {a:b for a,b in zip(a,b)} print(c)
在in 后面必须要有zip()去变成元组
生产数值字典
import random a = {i:random.randint(10,100)for i in range(1,5)} print(a)
{1: 45, 2: 64, 3: 34, 4: 93}
集合
意义
数学
把一些能够确定的不同对象,看成一个整体。那么这个整体是由这些对象构成的集合
python
用于保存不重复的元素
如果重复就会被去掉
创建
用{}
和字典是一样的
只不过字典是a:b
集合是无序的
所以不能用索引来找到元素
set()
字典名字 = set(要转换为集合的,列表、元组、字符串、range对象等)
空集合
这里就不能单用{}。因为{}表示的是空字典
添加
add()
集合名称.add(不能使用列表、字典等可变对象)
不能用可变的
删除
del()
删除整个集合
pop()
删除随机元素
remove()
删除指定元素
clear()
删除全部元素
只流一个空元素
交集、并集和差集
交集
&
两个集合都有的
并集
|
两个集合的全部
至少一个集合中出现过
差集
-
谁在前就表示,只有这个集合的
只有在一个集合中出现过
python = {'秦谦','王萃','孟宪涛','庞金强'} C = {'郭德纲','于谦','孟宪涛','庞金强'} print('选择python的同学有',python) print('选择C++的同学有',C) print('两个都选的有',python & C) print('全部学生有',python | C) print('只python的同学有',python - C) print('只选择C++的同学有',C - python)
选择python的同学有 {'庞金强', '王萃', '孟宪涛', '秦谦'} 选择C++的同学有 {'庞金强', '郭德纲', '孟宪涛', '于谦'} 两个都选的有 {'庞金强', '孟宪涛'} 全部学生有 {'庞金强', '王萃', '孟宪涛', '于谦', '郭德纲', '秦谦'} 只python的同学有 {'王萃', '秦谦'} 只选择C++的同学有 {'郭德纲', '于谦'}
其他
找索引值
index()
排序
sort()
sorted()
保留原来的
求和
sum()
sum(,X)
X+求和的值
语法
区别