鱼C论坛

 找回密码
 立即注册
查看: 8950|回复: 30

[知识点备忘] 第034讲:序列(中)

[复制链接]
发表于 2021-2-27 22:56:26 | 显示全部楼层 |阅读模式
购买主题 已有 25 人购买  本主题需向作者支付 5 鱼币 才能浏览
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-10-22 11:02:15 | 显示全部楼层
本节主要探讨了与序列相关的一部分函数,包括序列之间相互转换的函数(list()、tuple()、str())、求最值函数(min()、max())、求和函数(len()、sum())、排序函数(sorted()、reversed()),共计9个内置函数!其中,求最值函数有两种函数原型,既可以传入可迭代对象,也可以传入多个参数;可迭代对象为空时会抛出ValueError异常,可通过设置default参数来“缓和氛围”。len()函数的参数有最大可承受范围,超出就会报错(OverflowError)。排序函数返回的是一个全新的序列,并不会作用于序列本身,这与列表的内置方法原地排序有所不同。sorted()函数和列表的sort()方法可以通过设置key参数来指定排序标准,即干预排序的算法,灵活而又巧妙!与sorted()函数返回列表不同,reversed()函数返回的是一个参数的反向迭代器(一串奇奇怪怪的英文),其也属于可迭代对象,可利用上述转换函数转换为序列,这样就一目了然啦!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 3 反对 1

使用道具 举报

发表于 2021-12-3 19:16:01 | 显示全部楼层
>>> list("FishC")
['F', 'i', 's', 'h', 'C']
>>> list(1,2,3,4,5)
Traceback (most recent call last):
  File "<pyshell#1>", line 1, in <module>
    list(1,2,3,4,5)
TypeError: list expected at most 1 argument, got 5
>>> 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)'
>>> [" list()可将字符串、元组转变为列表,  tuple()可将列表,字符串转变为元组,  str()可将列表、元组转变为字符串"]
[' list()可将字符串、元组转变为列表,  tuple()可将列表,字符串转变为元组,  str()可将列表、元组转变为字符串']
>>> s = [1,1,2,3,5]
>>> min(s)
1
>>> max(s)
5
>>> t = "FishC"
>>> min(t)
'C'
>>> max(t)
's'
>>> ["min(),max()分别可以求得序列中的最小值和最大值,如果是字符串,那么求得的是编码最小和最大的值,编码顺序即为26个字母顺序,并且大写字母编码在小写字母编码之前"]
['min(),max()分别可以求得序列中的最小值和最大值,如果是字符串,那么求得的是编码最小和最大的值,编码顺序即为26个字母顺序,并且大写字母编码在小写字母编码之前']
>>> s = []
>>> min(s)
Traceback (most recent call last):
  File "<pyshell#16>", line 1, in <module>
    min(s)
ValueError: min() arg is an empty sequence
>>> min(s,default = "屁,啥都没有,怎么找到最小")
'屁,啥都没有,怎么找到最小'
>>> ["当可迭代对象为空时,此时直接求 min 、max 会出现报错,此时设置一个 default,即默认值,可以缓解气氛"]
['当可迭代对象为空时,此时直接求 min 、max 会出现报错,此时设置一个 default,即默认值,可以缓解气氛']
>>> 
>>> min(1,2,3,0,6)
0
>>> max(1,2,3,0,6)
6
>>> len(range(2 ** 100))
Traceback (most recent call last):
  File "<pyshell#22>", line 1, in <module>
    len(range(2 ** 100))
OverflowError: Python int too large to convert to C ssize_t
>>> ["len() 函数求长度,其有极限值"]
['len() 函数求长度,其有极限值']
>>> s = [1,0,0,8]
>>> sum(s)
9
>>> sum(s,start = 100)
109
>>> s = [1,2,3,0,6]
>>> sorted(s)
[0, 1, 2, 3, 6]
>>> ["sorted() 函数返回的是一个全新的列表,而原来的列表不会受影响"]
['sorted() 函数返回的是一个全新的列表,而原来的列表不会受影响']
>>> s
[1, 2, 3, 0, 6]
>>> s.sort()
>>> s
[0, 1, 2, 3, 6]
>>> ["如果使用 s.sort() 方法,s 本身就会被改变,切记!!!"]
['如果使用 s.sort() 方法,s 本身就会被改变,切记!!!']
>>> sorted(s,reverse = True)
[6, 3, 2, 1, 0]
>>> t = ["FishC","Apple","Book","Banana","Pen"]
>>> sort(t)
Traceback (most recent call last):
  File "<pyshell#36>", line 1, in <module>
    sort(t)
NameError: name 'sort' is not defined
>>> sorted(t)
['Apple', 'Banana', 'Book', 'FishC', 'Pen']
>>> sorted(t, key = len)
['Pen', 'Book', 'FishC', 'Apple', 'Banana']
>>> t.sort(key = len )
>>> t
['Pen', 'Book', 'FishC', 'Apple', 'Banana']
>>> ["使用 sorted() 对字符串进行排序时,先以每一字符串的首字母编码进行排序,如果首字母一样,再依次按照下一位字符串进行排序;                                     而 sorted(t,key = len) 中的 key 实际上是一个干预函数,他让排序方式按照字符串的长度来决定,对于列表中的字符串排序,我们可以使用 t.sort(key = len )来达到相同的结果"]
['使用 sorted() 对字符串进行排序时,先以每一字符串的首字母编码进行排序,如果首字母一样,再依次按照下一位字符串进行排序;                                     而 sorted(t,key = len) 中的 key 实际上是一个干预函数,他让排序方式按照字符串的长度来决定,对于列表中的字符串排序,我们可以使用 t.sort(key = len )来达到相同的结果']
>>> sorted("FishC")
['C', 'F', 'h', 'i', 's']
>>> sorted((1,0,0,8,6))
[0, 0, 1, 6, 8]
>>> ["sorted() 排序字符串、元组得到的是列表"]
['sorted() 排序字符串、元组得到的是列表']
>>> s = [1,2,5,8,0]
>>> reversed(s)
<list_reverseiterator object at 0x00000257D3BC3A60>
>>> list(reversed(s))
[0, 8, 5, 2, 1]
>>> s.reverse()
>>> ["reversed() 函数生成的是一个 迭代器, 即也是一个可迭代对象,它可以对 列表、字符串、元组进行逆向排序"]
['reversed() 函数生成的是一个 迭代器, 即也是一个可迭代对象,它可以对 列表、字符串、元组进行逆向排序']
>>> list(reversed("FishC"))
['C', 'h', 's', 'i', 'F']
>>> lies(reversed((1,2,3,4,5)))
Traceback (most recent call last):
  File "<pyshell#51>", line 1, in <module>
    lies(reversed((1,2,3,4,5)))
NameError: name 'lies' is not defined
>>> list(reversed((1,0,0,8,6)))
[6, 8, 0, 0, 1]
>>> list(reversed(range(0,10)))
[9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
>>>
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-3-30 17:37:27 | 显示全部楼层
为什么sorted(t, key=len) 中  FishC 会排 在 Apple的前边呢,因为 FishC长度更长么
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-4-29 10:58:58 | 显示全部楼层
打卡
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-5-10 21:39:21 | 显示全部楼层
生活好难编程好难
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-5-22 00:31:33 | 显示全部楼层
动动手:0
l=[1, 8, 7, 3, 6, 5, 4, 2]
a=[]
b=[]
l.sort()
for i in l:
    if  i %2==1:
        a.append(i)
    else:
        b.append(i)
print(a+b)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-6-27 15:14:25 | 显示全部楼层
本帖最后由 剪刀布稀里糊涂 于 2022-6-27 15:16 编辑
leizhenzi23 发表于 2022-3-30 17:37
为什么sorted(t, key=len) 中  FishC 会排 在 Apple的前边呢,因为 FishC长度更长么


楼主知道为什么了吗?  
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-8-7 11:31:15 | 显示全部楼层
list('ctx')
['c', 't', 'x']
list((1,2,3))
[1, 2, 3]
tuple('ctx')
('c', 't', 'x')
tuple((1,2,3))
(1, 2, 3)
tuple([1,2,3])
(1, 2, 3)
str([1,2])
'[1, 2]'
str((1,3))
'(1, 3)'
s=[1,1,2,3,5]
min(s)
1
t='ctx'
max(t)
'x'
t='Cc'
max(t)
'c'
s=[]
max(s)
Traceback (most recent call last):
  File "<pyshell#14>", line 1, in <module>
    max(s)
ValueError: max() arg is an empty sequence
min(s,'sdfds')
Traceback (most recent call last):
  File "<pyshell#19>", line 1, in <module>
    min(s,'sdfds')
TypeError: '<' not supported between instances of 'str' and 'list'
min(s,default='sdfds')
'sdfds'
len(range(2**333))
Traceback (most recent call last):
  File "<pyshell#21>", line 1, in <module>
    len(range(2**333))
OverflowError: Python int too large to convert to C ssize_t
s=[1,2,5]
sum(s)
8
sum(s,start=13)
21
s=[1,3,2,8,4]
sorted(s)
[1, 2, 3, 4, 8]
s
[1, 3, 2, 8, 4]
s.sort()
s
[1, 2, 3, 4, 8]
s=[1,5,2,8,4]
sorted(s,reverse=True)
[8, 5, 4, 2, 1]
s=[1,5,2,8,4]
sorted(s,reverse=False)
[1, 2, 4, 5, 8]
a=['ads','fgh','ervx','Ervx','ERvx']
sorted(a)
['ERvx', 'Ervx', 'ads', 'ervx', 'fgh']
sorted(a,len(s))
Traceback (most recent call last):
  File "<pyshell#36>", line 1, in <module>
    sorted(a,len(s))
TypeError: sorted expected 1 argument, got 2
sorted(a,key=len)
['ads', 'fgh', 'ervx', 'Ervx', 'ERvx']
sorted('Ctx')
['C', 't', 'x']
sorted('zqy')
['q', 'y', 'z']
sorted(1,0,0,8,6)
Traceback (most recent call last):
  File "<pyshell#40>", line 1, in <module>
    sorted(1,0,0,8,6)
TypeError: sorted expected 1 argument, got 5
sorted((1,0,0,8,6))
[0, 0, 1, 6, 8]
s=[1,3,7,8,5]
reversed(s)
<list_reverseiterator object at 0x103861720>
list(reversed(s))
[5, 8, 7, 3, 1]
s.reverse()
s
[5, 8, 7, 3, 1]
list(reversed("FishC"))
['C', 'h', 's', 'i', 'F']
tuple(reversed("FishC"))
('C', 'h', 's', 'i', 'F')
list(reversed((1, 2, 5, 9, 3)))
[3, 9, 5, 2, 1]
tuple(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]
tuple(reversed(range(0, 10)))
(9, 8, 7, 6, 5, 4, 3, 2, 1, 0)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-8-10 12:45:33 | 显示全部楼层
0.
s = [1, 8, 7, 3, 6, 5, 4, 2]

a = sorted(s)
res = []

for i in a:
    if i % 2 == 1:
        res.append(i)

for j in a:
    if j % 2 == 0:
        res.append(j)

print(res)

1.
s = input("请输入英文:")
a = list(reversed(s.split()))
print(" ".join(a))
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-8-19 15:10:57 | 显示全部楼层
leizhenzi23 发表于 2022-3-30 17:37
为什么sorted(t, key=len) 中  FishC 会排 在 Apple的前边呢,因为 FishC长度更长么

t1=["FishC","Apple","Book","Banana","Pen"]
sorted(t,key=len)
['Pen', 'Book', 'FishC', 'Apple', 'Banana']

t2=["Apple","Book","Banana","Pen","FishC"]
sorted(t,key=len)
['Pen', 'Book', 'Apple', 'FishC', 'Banana']

你对比一下就知道答案了,很简单
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-9-2 12:03:47 | 显示全部楼层
学习打卡
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-9-10 09:53:49 | 显示全部楼层
leizhenzi23 发表于 2022-3-30 17:37
为什么sorted(t, key=len) 中  FishC 会排 在 Apple的前边呢,因为 FishC长度更长么

这两个是一样长的,但他是稳定。
<sorted() 函数的排序结果是稳定的。
假定在待排序的序列中,存在多个相同的元素,经过排序之后,这些元素的相对次序保持不变,则称这种排序算法是稳定的;否则称为不稳定的。>
所以在key = len时,两个字符串一样长的话,会保持原来的相对次序。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 2 反对 0

使用道具 举报

发表于 2022-9-26 17:25:43 | 显示全部楼层
好难了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-10-5 19:21:00 | 显示全部楼层
len(range(2**63-1))
Traceback (most recent call last):
  File "<pyshell#90>", line 1, in <module>
    len(range(2**63-1))
OverflowError: Python int too large to convert to C ssize_t

我的电脑是64位,但是它报错了,这是为啥一,我还试了2的六十二次方、2的四十、2的三十二等等,都报错。查看了电脑,显示的是64位,是不是因为使用的Python版本的问题,我用的是3.7.3

但是输入2的三十一次方减1,就是对的。
>>> len(range(2**31-1))
2147483647

我的电脑显示的系统类型是64 位操作系统, 基于 x64 的处理器。

遇到的第二个问题是
s = [1,0,0,8,6]
>>> sum(s)
15
>>> sum(s,start=100)
Traceback (most recent call last):
  File "<pyshell#101>", line 1, in <module>
    sum(s,start=100)
TypeError: sum() takes no keyword arguments

它的结果不是115,结果报错了。想知道是什么原因然后怎么解决?

好像解决了:
>>> i = [3,2,0]
>>> sum(i,5)
10
后面不写start,直接写要加多少等等。


滴滴滴~打卡
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-11-4 13:27:44 | 显示全部楼层
s = [1,3,5,6]
sum(s)
15
sum(s,start=100)
115
sum(s,100)
115
我的都可以.
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-11-23 21:03:49 | 显示全部楼层
非常感谢大家的支持
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-12-27 21:26:25 | 显示全部楼层
打卡打卡
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-1-2 08:36:37 | 显示全部楼层
我的3.7.4版本不识别sum(s,start=10)中的start=10
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-1-11 20:52:16 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-21 19:59

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表