目录
7. sorted()
列表的 sort() 方法也是实现一样的排序功能,不过区别是:列表的 sort() 方法是原地排序;sorted() 函数是返回一个排序后的新列表(对原列表的顺序不会产生影响);
可迭代对象元素的排序方法,参见s.sort(key=None, reverse=False) ,如下:
列表中元素类型需要为同一类型(整数和浮点数可视为一类)可比较的元素,譬如都是整数或浮点数、都是字符、都是列表,否则报错。
整数、浮点数按数值大小排序。
字符按字符Unicode值排序。
列表、元组、字符串的各元素按索引0、索引1、索引2依次比较排序,每次比较的轮次中出现不可比较类型元素,则报错;未到该元素时,元素大小已排序完成,则该元素类型不限。
sorted()与列表的sort()方法不同的是,还支持字符串、元组等可迭代对象,输出排序后的列表;
sorted()函数支持key、reverse参数,默认(key=None, reverse=False);
key可以使用其他函数作为排序依据,譬如len()函数,使用时无需附带();
reverse为True时,倒序排列。
#列表的 sort() 方法是原地排序;sorted() 函数是返回一个排序后的新列表(对原列表的顺序不会产生影响)
s = [4,5,11,0.2,77.1]
sorted(s)
[0.2, 4, 5, 11, 77.1]
s
[4, 5, 11, 0.2, 77.1]
s.sort()
s
[0.2, 4, 5, 11, 77.1]
#sorted()支持字符串、元组等可迭代对象,输出排序后的列表
sorted('123abCD$% ')
[' ', '$', '%', '1', '2', '3', 'C', 'D', 'a', 'b']
sorted((2.0,111.1,0,-22,1,9))
[-22, 0, 1, 2.0, 9, 111.1]
#key可以使用其他函数作为排序依据,譬如len()函数,使用时无需附带()
sorted(['0+2j','abcdefg','','1a2','*~'],key=len)
['', '*~', '1a2', '0+2j', 'abcdefg']
#reverse为True时,倒序排列
sorted(['0+2j','abcdefg','','1a2','*~'],key=len,reverse=True)
['abcdefg', '0+2j', '1a2', '*~', '']
8. reversed()
reversed()函数将返回参数的反向迭代器,反向迭代器的作用就是将指定可迭代对象的元素倒序排序;
reversed()生成的反向迭代器,可以通过list、tuple等函数转换成相应的列表、元组;
reversed()支持字符串、元组、列表、range等可迭代对象,不支持整数、复数、浮点数等类型。
#reversed() 函数返回参数的反向迭代器
reversed('acdzfhi')
<reversed object at 0x00000256D974C040>
#reversed()生成的反向迭代器,可以通过list、tuple等函数转换成相应的列表、元组
list(reversed('acdzfhi'))
['i', 'h', 'f', 'z', 'd', 'c', 'a']
tuple(reversed([1,3,5,4,2,0]))
(0, 2, 4, 5, 3, 1)
list(reversed((9,[2,1],('abc',),5+2j)))
[(5+2j), ('abc',), [2, 1], 9]
tuple(reversed(range(5,10)))
(9, 8, 7, 6, 5)
9. all()
当可迭代对象中所有的元素的值均为真时,返回值为 True;
当可迭代对象中存在值为假的元素时,返回值为 False;
值为假的元素,包括整数、浮点数、负数值为0,或bool类型False;
值为真的元素,包括所有字符串、列表、元组、range()、非0的所有数值、bool类型为True;
range()作为可迭代对象输入时,如范围包括0则返回False;作为可迭代对象的一个元素输入时,如该值非空则为真;
支持字符串、列表、元组、range()等,输入非可迭代对象则报错;
传入的可迭代对象为空,返回True;输入带空的可迭代对象的列表、元组,返回False。
#当可迭代对象中存在值为假的元素时,返回值为 False
#值为假的元素,包括整数、浮点数、负数值为0,或bool类型False;
all([0])
False
all((0.0,1,2))
False
all([0+0j,2,3])
False
all((False,'abc'))
False
#值为真的元素,包括所有字符、列表、元组、非0的所有数值、bool类型为True
all(([0],(0,),'0.00'))
True
all([True,1,1j,0.1,'abc',range(1,2)])
True
#range()作为可迭代对象输入时,如范围包括0则返回False
#作为可迭代对象的一个元素输入时,如该值非空则为真
all(range(2))
False
all([range(1)])
True
#支持字符串、列表、元组、range()等,输入非可迭代对象则报错
all('0123')
True
all(range(3,10))
True
all(3)
Traceback (most recent call last):
File "<input>", line 1, in <module>
TypeError: 'int' object is not iterable
#传入的可迭代对象为空,返回True
all('')
True
all([])
True
all(())
True
all(range(0))
True
#输入带空的可迭代对象的列表、元组,返回False
all(['',1,2,3])
False
all(([],'abc',2.0))
False
all([range(0),1,2])
False
10. any()
any() 函数用于判断可迭代对象中是否存在其值为真的元素;
值为假的元素,包括整数、浮点数、负数值为0,或bool类型False;
值为真的元素,包括所有字符串、列表、元组、range()、非0的所有数值、bool类型为True;
range()作为可迭代对象输入时,如范围只有0则返回False;作为可迭代对象的一个元素输入时,如该值非空则为真;
支持字符串、列表、元组、range()等,输入非可迭代对象则报错;
直接输入空的字符串、列表、元组、range()返回True;输入带上述空元素的列表、元组,返回False。
如果传入的可迭代对象为空,那么返回值为 False;输入只有空的可迭代对象的列表、元组也返回False。
#可迭代对象,所有元素值为假,返回False
any([0,0.00,0+0j,False])
False
#可迭代对象,有一个元素值为真,返回True
any([1,0,0.00,0+0j,False])
True
any([0.1,0,0.00,0+0j,False])
True
any([-1j,0,0.00,0+0j,False])
True
any(['0',0,0.00,0+0j,False])
True
any([[0],0,0.00,0+0j,False])
True
any([(0,),0,0.00,0+0j,False])
True
any([True,0,0.00,0+0j,False])
True
#range()作为可迭代对象输入时,如范围只有0则返回False
#作为可迭代对象的一个元素输入时,如该值非空则为真,该值为空则为假
any(range(1))
False
any([range(1)])
True
any([range(0)])
False
#支持字符串、列表、元组、range()等,输入非可迭代对象则报错;
any('0.00,0+0j,0,False')
True
any(0123)
Traceback (most recent call last):
File "<input>", line 1, in <module>
TypeError: 'int' object is not iterable
#如果传入的可迭代对象为空,那么返回值为 False
any([])
False
any(())
False
any(range(0))
False
any('')
False
#输入只有空的可迭代对象的列表、元组也返回False
any(['',range(0),[],()])
False
any(['',range(0),[],(),1])
True
11. enumerate()
enumerate() 函数用于返回一个枚举对象,将可迭代对象中的每个元素及从 0 开始的序号共同构成一个二元组的迭代器;
可通过list()、tuple()将enumerate()返回的迭代器转换为列表、元组;
支持 start 参数,自定义可迭代对象各元素的起始序号值,该参数只能为整数值。
#enumerate() 函数将可迭代对象中的每个元素及从 0 开始的序号共同构成一个二元组的迭代器
enumerate('abcd')
<enumerate object at 0x000002690C70DEC0>
#可通过list()、tuple()将enumerate()返回的迭代器转换为列表、元组
list(enumerate('abcd'))
[(0, 'a'), (1, 'b'), (2, 'c'), (3, 'd')]
tuple(enumerate(['xyz','3.11','#0*']))
((0, 'xyz'), (1, '3.11'), (2, '#0*'))
list(enumerate(range(2,5)))
[(0, 2), (1, 3), (2, 4)]
tuple(enumerate((1.0,-1-1j,' ',[])))
((0, 1.0), (1, (-1-1j)), (2, ' '), (3, []))
#支持 start 参数,自定义可迭代对象各元素的起始序号值;
list(enumerate(['a1','#2','',' 4'],5))
[(5, 'a1'), (6, '#2'), (7, ''), (8, ' 4')]
list(enumerate(['a1','#2','',' 4'],-5))
[(-5, 'a1'), (-4, '#2'), (-3, ''), (-2, ' 4')]
#start参数只能为整数值
list(enumerate(['a1','#2','',' 4'],0.1))
Traceback (most recent call last):
File "<input>", line 1, in <module>
TypeError: 'float' object cannot be interpreted as an integer
list(enumerate(['a1','#2','',' 4'],'1'))

本文介绍了Python中五个重要的序列操作方法:sorted()用于对可迭代对象进行排序,返回排序后的新列表;reversed()生成反向迭代器,实现元素的倒序;all()检查可迭代对象中所有元素是否为真,返回True或False;any()检查可迭代对象中是否存在至少一个真值元素;enumerate()将可迭代对象的元素及其索引打包成枚举对象。
1533

被折叠的 条评论
为什么被折叠?



