python - python3中key=len, key=lambda x: (len(x), x)) 有什么区别
问题描述
我试图按元素的长度对列表进行排序,如果长度相同,则按字典顺序排序。测试清单是:
test = ['abcd', 'aa', 'bb', 'cc', 'dbca', 'bcda', 'ssdfgh', 'abcdefgh', 'abcdef']
而且,我尝试了两种排序方式。
一个是关键= len
test1 = sorted(test, key = len)
另一个是 key = lambda x : (len(x), x)
test2= sorted(test, key = lambda x : (len(x), x))
它们显示出不同的结果。
test1 的结果是:
['aa', 'bb', 'cc', 'abcd', 'dbca', 'bcda', 'ssdfgh', 'abcdef', 'abcdefgh']
test2 的结果是:
['aa', 'bb', 'cc', 'abcd', 'bcda', 'dbca', 'abcdef', 'ssdfgh', 'abcdefgh']
我想知道它们的工作方式有何不同。如何在 sorted(key = ~) 中找到内部结构?在 python 文档中,它只是解释了如何使用。我想知道内部代码。它是如何构建的,而不是它是如何使用的。
解决方案
key = len
仅按长度排序key = lambda x : (len(x), x)
首先按长度排序,当长度相同时,它按字典顺序排序
这就是为什么第一个测试让零件保持'dbca', 'bcda'
原样
而第二个测试将其重新排序为'bcda', 'dbca'
推荐阅读
- animation - Animation.commit 在 Xamarin Forms 中动画结束之前返回回调
- python - Pythonnet 错误:XamlParseException:“无法从文本中创建“点击”
- security - SNMPv2c 与 SNMPv3 自定义 MIB
- javascript - Angular 6 - 更改变量但不刷新视图
- windows - 跨路由器的 Windows 网络文件夹
- regex - R中非常大的文件的字符串匹配
- css - 在 vue2JS 中从上滑动全屏 div
- angular - 角度:通过两个 ngFors 更新指定 dom 的一部分
- amazon-web-services - AWS ec2 实例标签名称 Powershell
- sql-server - 查找两个日期期间之间的重叠天数