一、序列(中)总结
1.列表、元祖、字符串相互转换的函数
list() 列表
tuple() 元祖
str() 字符串
>>> list("Fishc") #列表
['F', 'i', 's', 'h', 'c']
>>> list((1,2,3,4,5))
[1, 2, 3, 4, 5]
>>> tuple("Fishc") #元祖
('F', 'i', 's', 'h', 'c')
>>> tuple([1,2,3,4,5])
(1, 2, 3, 4, 5)
>>> str([1,2,3,4,5]) #字符串
'[1, 2, 3, 4, 5]'
>>> str((1,2,3,4,5))
'(1, 2, 3, 4, 5)'
2.min()和max()函数
最大值、最小值函数
>>> s=[1,1,2,3,5]
>>> min(s)
1
>>> t='Fishc'
>>> max(t)
's'
>>> s=[]
>>> min(s) #空列表时,min()函数会报错
Traceback (most recent call last):
File "<pyshell#14>", line 1, in <module>
min(s)
ValueError: min() arg is an empty sequence
#空列表时,min()函数会报错,但加上default后,不会报错结果为default
>>> min(s,default="屁,啥都没有,怎么找到最小?")
'屁,啥都没有,怎么找到最小?'
>>> min(1,2,3,0,6)
0
>>> max(1,2,3,0,6)
6
>>>
3.len()和sum()函数
len()
len()函数参数太大导致。对32位来说,最大为2的32次方减一(2^32)-1,对64位来说,最大为2的64次方减一。
>>> len(range(2**100)) #溢出
Traceback (most recent call last):
File "<pyshell#20>", line 1, in <module>
len(range(2**100))
OverflowError: Python int too large to convert to C ssize_t
sum()
求和函数
>>> s=[1,0,0,8,6]
>>> sum(s)
15
>>> sum(s,100)
115
错误写法:
sum() 方法不接受关键字参数,所以如果我们编写那么它将抛出异常为 sum([1, 2, 3], start=10)TypeError: sum() takes no keyword arguments
>>> s=[1,0,0,8,6]
>>> sum(s)
15
>>> sum(s,start=100) #
Traceback (most recent call last):
File "<pyshell#33>", line 1, in <module>
sum(s,start=100)
TypeError: sum() takes no keyword arguments
>>>
4.sorted()函数和reversed()函数
sorted()
对列表元素进行排序:含数字的
>>> s=[1,2,3,0,6]
>>> sorted(s)
[0, 1, 2, 3, 6]
>>> s #对列表s使用sorted()进行排序后,s中元素顺序不会变
[1, 2, 3, 0, 6]
>>> s.sort()
>>> s
[0, 1, 2, 3, 6]
>>> s=[1,2,3,0,6]
>>> sorted(s,reverse=True) #reverse为真,将列表元素倒过来
[6, 3, 2, 1, 0]
>>> s=[1,2,3,0,6]
>>> sorted(s,reverse=False) #将列表元素正序排列
[0, 1, 2, 3, 6]
>>> sorted((1,0,0,8,6))
[0, 0, 1, 6, 8]
>>>
对列表元素进行排序:含字母的
>>> t=["Fishc","Apple","Book","Banana","Pen"] #根据字符串的字符的ascii码进行排序
>>> sorted(t)
['Apple', 'Banana', 'Book', 'Fishc', 'Pen']
>>> sorted(t,key=len) #根据len长度进行排序
['Pen', 'Book', 'Fishc', 'Apple', 'Banana']
>>>
>>>
>>> t.sort(key=len)
>>> t
['Pen', 'Book', 'Fishc', 'Apple', 'Banana']
>>> sorted("Fishc")
['F', 'c', 'h', 'i', 's']
>>>
reversed()
将列表元素进行倒序排列
>>> s=[1,2,5,8,0]
>>> reversed(s) #返回结果是一个迭代器,把它理解成可迭代对象就行
<list_reverseiterator object at 0x000001F391A8EC88>
>>> list(reversed(s)) #对列表进行倒叙
[0, 8, 5, 2, 1]
>>> s.reverse()
>>> s
[0, 8, 5, 2, 1]
>>>
>>> list(reversed("FishC")) #根据字符串的字符的ascii码进行倒序排列
['C', 'h', 's', 'i', 'F']
>>> list(reversed((1,2,5,9,3)))
[3, 9, 5, 2, 1]
>>> list(reversed(range(0,10)))
[9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
>>>
课后题:
0. 列表的 sort() 方法和 sorted() 函数有哪些异同点(至少各举 3 个)?
答:
相同点:
默认都是从小到大正向排序
都支持 key 和 reverse 两个参数
排序的结果可都是列表
都是稳定排序(就是说如果存在多个相同的元素,经过排序之后,这些元素的相对次序保持不变)
不同点:
一个是列表的方法;一个是独立的函数
一个叫 sort();一个叫 sorted()
列表的 sort() 方法是原地排序;sorted() 函数是讲排序后的结果返回为一个新的列表
列表的 sort() 方法只能对列表的元素进行排序;sorted() 函数则可以对任何形式的可迭代对象进行排序
列表的 sort() 方法返回值是 None;sorted() 函数返回一个新列表
2. 请问 sorted() 函数和 reversed() 函数返回的是同一个类型的对象吗?
答:不是。
解析:
sorted() 函数返回的是一个列表,列表是属于可迭代对象;reversed() 函数返回的是一个反向迭代器,迭代器属于可迭代对象,但两者有不同的特征,具体我们在下一讲会有介绍。
3. 请问下面代码执行后的结果是?
>>> max("FishC") and min("FishC")
答:
>>> max("FishC") and min("FishC")
'C'
解析:
max(“FishC”) 会得到 ‘s’,min(“FishC”) 会得到 ‘C’,
对于 and 和 or 运算符,它的计算结果不一定是 True 或者 False。如果你给到操作数的是两个数值,那么它的运算结果也是数值,如果你给到操作数的是两个字符串,那么它的结果也是字符串。
知识点回顾: 布尔类型
>>> 3 and 4
4
>>> 4 or 5
4
>>> "FishC" and "LOVE"
'LOVE'
4. 请问下面代码会打印什么内容?
>>> x = [1, 2, 5, 8, 0]
>>> y = reversed(x)
>>> y[2]
答:会报错。
解析:
因为 reversed() 函数返回的是一个反向迭代器,它并不支持下表索引的方式获取其中的某个元素。
如果非要这么做,咱可以这么写 y = list(reversed(x)),相当于将这个反向迭代器转换为列表,然后再通过下标去获取某个元素,就没问题啦。
5.请问下面代码会打印什么内容?
>>> list(reversed(sorted("FishC520")))
['s', 'i', 'h', 'F', 'C', '5', '2', '0']
答:
>>> list(reversed(sorted("FishC520")))
['s', 'i', 'h', 'F', 'C', '5', '2', '0']
解析:
这里涉及到 3 个 BIF 函数的嵌套调用,Python 会先调用 sorted(“FishC520”) 进行排序(按 Unicode 编码的从小到大进行排序……数字在字母之前,大写字母在小写字母之前),得到的结果是 [‘0’, ‘2’, ‘5’, ‘C’, ‘F’, ‘h’, ‘i’, ‘s’];然后将该结果作为 reversed() 函数的参数继续调用,reversed([‘0’, ‘2’, ‘5’, ‘C’, ‘F’, ‘h’, ‘i’, ‘s’]),得到该参数值的反向迭代器;最后将该反向迭代器转换为列表,得到 [‘s’, ‘i’, ‘h’, ‘F’, ‘C’, ‘5’, ‘2’, ‘0’]。
课后题来自小甲鱼: 序列(中)