【python中sorted函数和sort函数的使用】

sort函数只有列表中才有
字符串 元组 字典都没有这个函数如下所示:

L=[1,2,3,4,5,1,2,89,52,36]
L.sort()
print(L)
"""
输出结果
[1, 1, 2, 2, 3, 4, 5, 36, 52, 89]
"""
L=(1,2,3,4,5,1,2,89,52,36)
L.sort()
print(L)
"""
---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
<ipython-input-31-e85fcb0f54b1> in <module>()
      1 L=(1,2,3,4,5,1,2,89,52,36)
----> 2 L.sort()
      3 print(L)

AttributeError: 'tuple' object has no attribute 'sort'
"""
L='1321351'
L.sort()
print(L)
"""
---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
<ipython-input-32-e8a40f9ae604> in <module>()
      1 L='1321351'
----> 2 L.sort()
      3 print(L)

AttributeError: 'str' object has no attribute 'sort'
"""
MAP={'abc':123,"edf":23,'rty':12,'ab':456,'ghj':123,'aef':159}
MAP.sort()
print(MAP)
"""
---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
<ipython-input-33-ba85bbe123f0> in <module>()
      1 MAP={'abc':123,"edf":23,'rty':12,'ab':456,'ghj':123,'aef':159}
----> 2 MAP.sort()
      3 print(MAP)

AttributeError: 'dict' object has no attribute 'sort'
"""

以上就是他们的情况
sort函数只是列表自有的排序函数L.sort()返回值是None

L=[1,5,2,3]
print(L.sort())
"""
None
"""

那么字符串,元组,字典没有自己的排序函数怎么办?python的设计者就为他们写了这样一个函数sorted

L='21531351589'
P=(1,8,3,2,5,4)
print(sorted(L))
print(sorted(P))
"""
['1', '1', '1', '2', '3', '3', '5', '5', '5', '8', '9']
[1, 2, 3, 4, 5, 8]
"""

他们最终都会变成列表,那么如果我们想把他们变回去怎么办呢?请看下面的代码

L='21531351589'
P=(1,8,3,2,5,4)
print(sorted(P))
print(sorted(P))
print(tuple(sorted(P)))
print(''.join(x for x in sorted(L)))
"""
[1, 2, 3, 4, 5, 8]
[1, 2, 3, 4, 5, 8]
(1, 2, 3, 4, 5, 8)
11123355589
"""

join函数有什么作用呢用法是 str.join(需要被用字符str连接起来的字符)如:

print('-'.join(x for x in ['1','2','3']))
"""
结果输出:
1-2-3
"""

下来看对字典的使用

MAP={'abc':123,"edf":23,'rty':12,'ab':456,'ghj':123,'aef':159}
print(sorted(MAP))
print(sorted(MAP.keys()))
print(sorted(MAP.values()))
print(sorted(MAP.items()))
print(sorted(MAP.items(),key=lambda x:x[0]))
print(sorted(MAP.items(),key=lambda x:x[1]))
print(sorted(MAP.items(),key=lambda x:(x[0],x[1])))
print(sorted(MAP.items(),key=lambda x:(x[1],x[0])))
"""
['ab', 'abc', 'aef', 'edf', 'ghj', 'rty']
['ab', 'abc', 'aef', 'edf', 'ghj', 'rty']
[12, 23, 123, 123, 159, 456]
[('ab', 456), ('abc', 123), ('aef', 159), ('edf', 23), ('ghj', 123), ('rty', 12)]
[('ab', 456), ('abc', 123), ('aef', 159), ('edf', 23), ('ghj', 123), ('rty', 12)]
[('rty', 12), ('edf', 23), ('abc', 123), ('ghj', 123), ('aef', 159), ('ab', 456)]
[('ab', 456), ('abc', 123), ('aef', 159), ('edf', 23), ('ghj', 123), ('rty', 12)]
[('rty', 12), ('edf', 23), ('abc', 123), ('ghj', 123), ('aef', 159), ('ab', 456)]
"""

对于上面8条结果我们一条条来分析:
1.sorted(MAP)是默认对字典的keys来进行排序的,因此输出结果是对key排序
2.MAP.keys()是返回关键字keys的列表

MAP={'abc':123,"edf":23,'rty':12,'ab':456,'ghj':123,'aef':159}
P=MAP.keys()
print(P)
"""
dict_keys(['abc', 'edf', 'rty', 'ab', 'ghj', 'aef'])
"""

因此是对关键字排序
3.同理是对键值排序

MAP={'abc':123,"edf":23,'rty':12,'ab':456,'ghj':123,'aef':159}
P=MAP.values()
print(P)
"""
dict_values([123, 23, 12, 456, 123, 159])
"""

5.print(sorted(MAP.items(),key=lambda x:x[0]))
首先MAP.items()结果如下:

MAP={'abc':123,"edf":23,'rty':12,'ab':456,'ghj':123,'aef':159}
P=MAP.items()
print(P)
"""
dict_items([('abc', 123), ('edf', 23), ('rty', 12), ('ab', 456), ('ghj', 123), ('aef', 159)])
"""

key后面是一个lambda函数函数返回的是x[0],那么x是什么呢?
x就是列表dict_items中的元素即元组即:(‘abc’, 123),(‘edf’, 23)…
所以排序就是按照x[0]即关键字来给列表dict_items([(‘abc’, 123), (‘edf’, 23), (‘rty’, 12), (‘ab’, 456), (‘ghj’, 123), (‘aef’, 159)])排序
6.参照4.就是按照keys()的顺序给列表dict_items([(‘abc’, 123), (‘edf’, 23), (‘rty’, 12), (‘ab’, 456), (‘ghj’, 123), (‘aef’, 159)])排序因此顺序是按照Keys的顺序
7.print(sorted(MAP.items(),key=lambda x:(x[0],x[1])))的意思就是先按x[0]排序如果x[0]相同再按x[1]排序
8.同理所以对于(‘abc’, 123), (‘ghj’, 123)先按values()排序是相同的再按keys()排序就是这样的结果
其实sorted还有一个参数
sorted(迭代变量,key,reverse)reverse的值有两个True或者False默认后者
他的意思就是是否需要逆序输出

因此下面的代码会输出如下结果:

MAP={'abc':123,"edf":23,'rty':12,'ab':456,'ghj':123,'aef':159}
print(sorted(MAP))
print(sorted(MAP.keys()))
print(sorted(MAP.values()))
print(sorted(MAP.items()))
print(sorted(MAP.items(),key=lambda x:x[0],reverse=True))
print(sorted(MAP.items(),key=lambda x:x[1],reverse=True))
print(sorted(MAP.items(),key=lambda x:(x[0],x[1]),reverse=True))
print(sorted(MAP.items(),key=lambda x:(x[1],x[0]),reverse=True))
"""
['ab', 'abc', 'aef', 'edf', 'ghj', 'rty']
['ab', 'abc', 'aef', 'edf', 'ghj', 'rty']
[12, 23, 123, 123, 159, 456]
[('ab', 456), ('abc', 123), ('aef', 159), ('edf', 23), ('ghj', 123), ('rty', 12)]
[('rty', 12), ('ghj', 123), ('edf', 23), ('aef', 159), ('abc', 123), ('ab', 456)]
[('ab', 456), ('aef', 159), ('abc', 123), ('ghj', 123), ('edf', 23), ('rty', 12)]
[('rty', 12), ('ghj', 123), ('edf', 23), ('aef', 159), ('abc', 123), ('ab', 456)]
[('ab', 456), ('aef', 159), ('ghj', 123), ('abc', 123), ('edf', 23), ('rty', 12)]
"""

END…

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值