Python笔记009 - sort排序
1.sort( )
- 该方法用来对列表中的元素进行排序
- sort( ) 方法默认是直接比较列表中的元素的大小
l = ['zzz','sf','wwe','sc']
print('before change:')
print(l)
print(type(l))
print(id(l))
l.sort()
print('after change:')
print(l)
print(type(l))
print(id(l))
# before change:
# ['zzz', 'sf', 'wwe', 'sc']
# <class 'list'>
# 4365966336
# after change:
# ['sc', 'sf', 'wwe', 'zzz']
# <class 'list'>
# 4365966336
- sort( ) 方法中还有一个参数 key ,可以设置根据 key(某个参照) 进行比较
- 当我们想根据字符串的长度进行比较时,可以如下设置:
l = ['zzz','sf','wwe','sc']
print('before change:')
print(l)
l.sort(key=len)
print('after change:')
print(l)
# before change:
# ['zzz', 'sf', 'wwe', 'sc']
# after change:
# ['sf', 'sc', 'zzz', 'wwe']
当列表中,既有字符串又有数值型的时候,可以如下设置:
l.sort(key=str)
# 这样的话,在比较的时候就会根据全是字符串的形式进行比较
# 不会对其类型进行改变
l = ['zzz','sf','wwe',22,9,1728,290, 11]
print('before change:')
print(l)
l.sort(key=str)
print('after change:')
print(l)
# before change:
# ['zzz', 'sf', 'wwe', 22, 9, 1728, 290, 11]
# after change:
# [11, 1728, 22, 290, 9, 'sf', 'wwe', 'zzz']
当列表中既有数值型,又有数值形式的字符串的时候,可以如下设置进行比较:
l.sort(key=int)
# 这样的话,在比较的时候就会根据全是字符串的形式进行比较
# 不会对其类型进行改变
l = ['1000000','190','3',22,9,1728,290, 11]
print('before change:')
print(l)
l.sort(key=int)
print('after change:')
print(l)
# before change:
# ['1000000', '190', '3', 22, 9, 1728, 290, 11]
# after change:
# ['3', 9, 11, 22, '190', 290, 1728, '1000000']
改变顺序的话,只需要设置参数reverse=True就ok,默认是False。
l = ['1000000','190','3',22,9,1728,290, 11]
print('before change:')
print(l)
l.sort(key=int,reverse=True)
print('after change:')
print(l)
# before change:
# ['1000000', '190', '3', 22, 9, 1728, 290, 11]
# after change:
# ['1000000', 1728, 290, '190', 22, 11, 9, '3']
2.sorted( )
用法与 sort( ) 的用法基本一致,sorted( ) 适用的对象更广,可以针对任意的序列。而 sort( ) 是针对列表。
另一个不同是, sort( ) 在直接改变了原来的对象(列表),而 sorted( ) 是返回一个新的对象(序列)。
l = ['1000000','190','3',22,9,1728,290, 11]
print('before change:')
print(l)
print(sorted(l,key=int))
print('after change:')
print(l)
# before change:
# ['1000000', '190', '3', 22, 9, 1728, 290, 11]
# ['3', 9, 11, 22, '190', 290, 1728, '1000000']
# after change:
# ['1000000', '190', '3', 22, 9, 1728, 290, 11]
序列为元组的时候:
l = ('1000000','190','3',22,9,1728,290, 11)
print('before change:')
print(l)
a = sorted(l,key=int)
print('a:', a)
print('after change:')
print(l)
# before change:
# ('1000000', '190', '3', 22, 9, 1728, 290, 11)
# a: ['3', 9, 11, 22, '190', 290, 1728, '1000000']
# after change:
# ('1000000', '190', '3', 22, 9, 1728, 290, 11)
集合的时候:
l = {'1000000','190','3',22,9,1728,290, 11}
print('before change:')
print(l)
a = sorted(l,key=int)
print('a:', a)
print('after change:')
print(l)
# before change:
# {1728, 290, '3', 9, 11, '190', 22, '1000000'}
# a: ['3', 9, 11, 22, '190', 290, 1728, '1000000']
# after change:
# {1728, 290, '3', 9, 11, '190', 22, '1000000'}
字符串的时候:
l = '12930824329'
print('before change:')
print(l)
a = sorted(l,key=int)
print('a:', a)
print('after change:')
print(l)
# before change:
# 12930824329
# a: ['0', '1', '2', '2', '2', '3', '3', '4', '8', '9', '9']
# after change:
# 12930824329
可以发现使用 sorted( ) 函数的时候,都会生成一个新的列表。