- 📢博客主页:盾山狂热粉的博客_CSDN博客-C、C++语言,机器视觉领域博主
- 📢努力努力再努力嗷~~~✨
💡大纲
⭕列表、元组、字符串都是序列,列表是可变序列,元组和字符串是不可变序列
一、跟序列相关的操作符
(一)+(拼接)*(重复)
👉在python中,每一个变量都有三个属性:唯一标志、类型、值
- 唯一标志:在变量创建后不可修改
- 对于可变序列:列表来说,在对其进行重复操作后,id值不变
- 对于不可变序列:元组、字符串来说,重复操作后id值会变化,因为不能对其本身进行直接操作,是创建了一个新的变量
(二)同一性运算符:is is not
👉判断是不是同一对象,对于可变数据类型来说,在python中创建两个相同内容的变量,其id值不同;对于不可变数据类型来说,就算创建了两个相同内容的变量,在python中也只会创建一个地址用来存储该内容
(三)包含问题:in not in
(四)删除一个或多个指定对象:del
👉在删除连续区域的内容时,切片也可以满足删除的要求,但是对于指定不同位置的删除,切片是做不到的
二、跟序列相关的函数
(一)列表、元组、字符串相互转换
1、可迭代对象转换为列表
list("fishc") # ['f', 'i', 's', 'h', 'c']
list((1,2,3,4,5)) # [1, 2, 3, 4, 5]
2、可迭代对象转换为元组
tuple("fishc") # ('f', 'i', 's', 'h', 'c')
tuple([1,2,3,4,5]) # (1, 2, 3, 4, 5)
3、可迭代对象转换为字符串
age = 24
print("My age is "+str(age)) # My age is 24
(二)min() max()
👉对比传入的可迭代对象,返回最小值或最大值
- 数字类型比较数值大小
- 字符串类型比较编码值大小
s = [1,1,2,3,5]
min(s)
x = "fishc"
min(x) # 'c'
👉对于空列表,直接取最小值会报错,需要在min函数中给定默认参数default=……。此时,如果为空,会输出默认参数的内容
(三)len() sum()
👉len函数是有长度限制的,最大为2^63-1
👉sum函数可以指定求和的起始值
(四)sorted() reversed()
💡列表进行临时排序---sorted(可迭代对象)
👉原列表保持不变,返回排序后的列表
👉可以处理所有类型的可迭代对象,返回一个列表
list1 = [2, 5, 2, 8, 19, 3, 7]
list2 = sorted(list1)
print(list1) # [2, 5, 2, 8, 19, 3, 7]
print(list2) # [2, 2, 3, 5, 7, 8, 19]
sorted(list1, reverse = True) # [19, 8, 7, 5, 3, 2, 2] 降序
👉参数key可以规定排序算法。这里使用len函数,排序会按照字符串的长度去排序
t = ["Apple","Banana","Fishc","Pen","Book"]
sorted(t) # ['Apple', 'Banana', 'Book', 'Fishc', 'Pen']
sorted(t,key=len) # ['Pen', 'Book', 'Apple', 'Fishc', 'Banana']
💡返回一个参数的反向迭代器(可迭代对象)---reversed(可迭代对象)
👉会生成对应数据类型的迭代器,然后使用相应的转换操作符来取出迭代器中的内容
s = [1,2,5,8,0]
reversed(s) # 一个迭代器<list_reverseiterator at 0x1f27215f5b0>
list(reversed(s)) # [0, 8, 5, 2, 1]
(五)all() any()
1、any()
👉有一个为真就返回True
2、all()
👉全真,则返回True
print(any([False,1,0,None]))
print(all([False,1,0,None]))
(六)enumerate()
💡返回一个枚举类型,主要是将可迭代对象中的每个元素及从0开始的序号共同组成一个二元组的列表
👉在函数中可以指定开始序号,enumerate(可迭代对象,开始序号)
seasons = ["Spring","Sunmmer","Fall","Winter"]
enumerate(seasons) # <enumerate at 0x1f27255f650>
list(enumerate(seasons)) # [(0, 'Spring'), (1, 'Sunmmer'), (2, 'Fall'), (3, 'Winter')]
list(enumerate(seasons,10)) # [(10, 'Spring'), (11, 'Sunmmer'), (12, 'Fall'), (13, 'Winter')]
(七)zip()
💡创建一个聚合多个可迭代对象的迭代器
👉主要是将作为参数传入的多个可迭代对象的每个元素依次组合成元组,即第i个元组包含来自每个参数的第i个元素
👉在输出迭代器内容时,数据类型由根据类型转换操作符决定的,元素是元组类型的
x = [1,2,3]
y = [4,5,6]
zipped = zip(x,y)
list(zipped) # [(1, 4), (2, 5), (3, 6)]
tuple(zipped) # ((1, 4), (2, 5), (3, 6))
str(zipped) # '<zip object at 0x000001F271EB33C0>'
👉如果传入的参数长度不一致,以最短的参数为准或者导入itertools模块,使用zip_longest()函数,会在组合时自动为短的参数填充空值none
(八)map()
💡根据提供的函数对指定的可迭代对象的每个元素进行运算,并返回运算结果的迭代器
👉例子中根据给定的oed函数对字符串的字符依次进行计算,然后得到一个迭代器,对该迭代器进行数据转换
mapped = map(ord,"FishC")
list(mapped) # [70, 105, 115, 104, 67]
👉如果使用的函数是多个参数的,那么可迭代对象的数量也要对应增加
mapped = map(pow,[2,3,10],[5,2,3])
list(mapped) # [32, 9, 1000]
👉对于长短不一的可迭代对象,只能按照最短的来进行处理
list(map(max,[1,2,5],[2,2,2],[0,3,9,8])) # [2, 3, 9] 第三个参数的8是没有可比较的对象的
(九)filter() 过滤器
💡根据提供的函数对指定的可迭代对象的每个元素进行运算,并将结果为真的元素,以迭代器的形式返回
👉例子是过滤出小写字母
list(filter(str.islower,"FishC")) # ['i', 's', 'h']
三、迭代器 vs 可迭代对象
💡一个迭代器肯定是一个可迭代对象
👉迭代器是一次性的,可迭代对象可以重复使用
👉对于迭代器,只要对其进行相关数据操作,里面内容就会被取出,再次访问时就是空的
(一)iter()
💡生成迭代器
x = [1,2,3,4,5]
y = iter(x) # y成为一个迭代器
type(x) # list
type(y) # list_iterator 列表迭代器
(二)next()
next(y) # 1
next(y)
next(y)
next(y)
next(y) # 5
next(y) # 在将迭代器都输出结束后,会输出一个异常
💡可以给定默认输出的异常
z = iter(x)
next(z,"没啦")
next(z,"没啦")
next(z,"没啦")
next(z,"没啦")
next(z,"没啦")
next(z,"没啦") # 输出结束后会抛出给定的内容
📢欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正!