参考资料:【Python教程】《零基础入门学习Python》最新版(2022年12月26日更新)
序列 Python中,列表、元组和字符串都属于序列
1. 序列的基本运算
加法 + 乘法 *
1 2 3 4 5 6 a = [1 , 2 , 3 ] b = [4 , 5 , 6 ] c = a + b d = a * 2 print (c)print (d)
1 2 [1, 2, 3, 4, 5, 6] [1, 2, 3, 1, 2, 3]
2. 序列的判定函数 2.1 关键词’is’ & ‘is not’ 1 2 3 4 5 6 a = [1 , 2 , 3 ] b = [1 , 2 , 3 ] print ("a == b?" )print ("True" ) if a == b else print ("False" )print ("a is b?" )print ("True" ) if a is b else print ("False" )
1 2 3 4 a == b? True a is b? False
第一次判定的是’a’与’b’的元素值是否相等,而第二次判定的是’a’与’b’是否与同一组数据挂钩 放在C语言中,就好比’==’判断变量储存的数值是否相等,而’is’判断他们是否指向同一个内存地址 但是在Python中,我们一般认为变量名并不是储存了数据,而是与数据挂钩,同时一般Python也不常用指针的概念 这是因为Python对指针做了良好封装,一切都是“对象”,一切对象都有一个“变量”指向它。这个“变量”就是“指针”
而’is’和’is not’就是用来判断’a’和’b’是否指向了同一个对象
,其本质和比较指针是一样的
2.2 id()
Return the identity of an object.1 2 3 4 5 6 a = (1 , 2 , 3 ) b = 1 , 2 , 3 print ("True" ) if id (a) == id (b) else print ("False" )c = [1 , 2 , 3 ] d = [1 , 2 , 3 ] print ("True" ) if id (c) == id (d) else print ("False" )
id()相当于C语言中取地址符,它得到的相当于与变量名挂钩的数据的”身份证”,只要数据存在于内存中,这个值就唯一
2.3 关键词’in’ & ‘not in’ 1 2 3 4 5 6 a = (1 , 2 , 3 ) b = 1 , 2 , 3 print ("1 in a?" )print ("True" ) if 1 in a else print ("False" )print ("a not in b?" )print ("True" ) if a not in b else print ("False" )
1 2 3 4 1 in a? True a not in b? True
3. 关键词’del’ 作用:删除1 2 3 4 5 6 7 8 9 10 x = [1 , 2 , 3 , 4 , 5 ] print (x)del x[0 ]print (x)del x[:2 ]print (x)del x[:]print (x)del xprint (x)
1 2 3 4 5 6 7 8 [1, 2, 3, 4, 5] [2, 3, 4, 5] [4, 5] [] Traceback (most recent call last): File "D:\PycharmProjects\test\main.py", line 10, in <module> print(x) NameError: name 'x' is not defined
4. 序列基本函数 4.1 list() & tuple() & str()
list(iterable) tuple(iterable) str(object) # str(object=’’) -> str
1 2 3 4 print (list ("Momoyeyu" ))print (tuple ("Momoyeyu" ))print (str ("Momoyeyu" ))print (str (list ("Momoyeyu" )))
1 2 3 4 ['M', 'o', 'm', 'o', 'y', 'e', 'y', 'u'] ('M', 'o', 'm', 'o', 'y', 'e', 'y', 'u') Momoyeyu ['M', 'o', 'm', 'o', 'y', 'e', 'y', 'u']
4.2 max() & min()
max(iterable, *[, default=obj, key=func]) min(iterable, *[, default=obj, key=func]) 注:可选参数default默认是报错,可以设置内容
1 2 3 print (max ([1 , 2 , 3 , 4 , 5 ]))print (min ("Momoyeyu" ))print (min ([], default = "Empty!" ))
4.3 len() & sum()
len(obj) sum(iterable, /, start=0) 注:可选参数start默认是0,可以设置起始值
1 2 print (len (range (2 ** 10 )))print (sum ([1 , 2 , 3 , 4 , 5 ], start=10 ))
4.4 sorted() & reversed()
sorted(iterable, /, *, key=None, reverse=False) reversed(sequence) # Return a reverse iterator over the values of the given sequence.
1 2 3 4 print (sorted ([3 , 1 , 4 , 2 ]))print (sorted (["Momoyeyu" , "Gger" , "Guitar" ], key=len , reverse=True ))print (reversed ([1 , 0 , 0 , 8 , 6 ]))print (list (reversed ([1 , 0 , 0 , 8 , 6 ])))
1 2 3 4 [1, 2, 3, 4] ['Momoyeyu', 'Guitar', 'Gger'] <list_reverseiterator object at 0x000002891CDAFE20> [6, 8, 0, 0, 1]
由输出第3行我们注意到,reversed()返回的不是一个列表,根据Python官方文档说明,reversed()返回的是一个迭代器
4.5 all() & any()
all(iterable) any(iterable)
1 2 print (all ([1 , 1 , 0 ]))print (any ([0 , 0 , 1 ]))
5. 关于迭代器-iterator 5.1 enumerate()
enumerate(iterable, start=0) # 返回一个枚举对象 注:可选参数start可以设置起始序号
1 2 3 4 Kisetsu = ["Haru" , "Natsu" , "Aki" , "Huyu" ] print (enumerate (Kisetsu))print (list (enumerate (Kisetsu)))print (list (enumerate (Kisetsu, 10 )))
1 2 3 <enumerate object at 0x0000014117E308C0> [(0, 'Haru'), (1, 'Natsu'), (2, 'Aki'), (3, 'Huyu')] [(10, 'Haru'), (11, 'Natsu'), (12, 'Aki'), (13, 'Huyu')]
5.2 zip()
zip(*iterables, strict=False) # Return an iterator
1 2 3 4 x, y = [1 , 2 , 3 ], [4 , 5 , 6 ] z = zip (x, y) print (z)print (list (z))
1 2 <zip object at 0x0000022F43B43040> [(1, 4), (2, 5), (3, 6)]
1 2 3 print (list (zip ([1 , 2 , 3 ], "Momoyeyu" )))import itertoolsprint (list (itertools.zip_longest([1 , 2 , 3 ], "Momoyeyu" )))
1 2 [(1, 'M'), (2, 'o'), (3, 'm')] [(1, 'M'), (2, 'o'), (3, 'm'), (None, 'o'), (None, 'y'), (None, 'e'), (None, 'y'), (None, 'u')]
zip()默认进行的时截短运算,但可以从itertools中引用itertools.zip_longest()来进行保长运算
5.4 map() & filter()
map(func, *iterables) 注:func指的是一套运算规则,map()会将*iterables中的对象都按照func进行计算然后返回其结果组成的iterator
1 2 print (list (map (ord , "Momoyeyu" )))print (list (map (pow , [2 , 2 , 2 ], [8 , 9 , 10 , 11 ])))
1 2 [77, 111, 109, 111, 121, 101, 121, 117] [256, 512, 1024]
由输出第二行可以看出,对于数据长度不同时,map()与zip()相同,选择了截短运算
filter(function or None, iterable) 注:和map()类似,但只将结果为True的元素返回到iterator
1 print (list (filter (str .islower, "G-ger" )))
6. 迭代器和可迭代对象-iterator & iterable
iterator是一次性的,而iterable可以重复使用
可参考迭代器和可迭代对象
6.1 iterator 1 2 3 4 5 6 7 8 9 x = [1 , 2 , 3 , 4 , 5 ] y = iter (x) print (type (x))print (type (y))i = 0 while i < len (x): i+=1 print (next (y, "Empty" ), end=" " ) print (next (y, "Empty" ))
1 2 3 <class 'list'> <class 'list_iterator'> 1 2 3 4 5 Empty
next()函数可以让iterator进行一次迭代,迭代到尽头之后就会报错,可以设置报错内容
6.2 iterable 可迭代对象可以理解为可以重复使用的迭代器 iterable可以进行迭代,迭代完成后,它又可以被引用,从头进行迭代,因为它的数据还被完整保留着 而iterator迭代完成之后,迭代器里的数据就被释放完了,不可再次使用
一个迭代器肯定
是一个可迭代对象
6.3 iterator与iterable比较
根据应用场景不同,他们有各自的优劣: iterator: 不会占用太多资源储存数据,他只会由现在的数据迭代计算下一个数据,但这个过程往往是不可逆的,迭代后上一个数据就抛弃了 iterable: 可以重复使用,迭代后之前的数据也得到保存,但比较占用资源