(小甲鱼python)序列笔记合集二 序列(中)总结 列表、元祖、字符串相互转换的函数 min()和max()函数 len()和sum()函数 sorted()函数和reversed()函数

一、序列(中)总结

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’]。

课后题来自小甲鱼: 序列(中)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值