为了账号安全,请及时绑定邮箱和手机立即绑定

Python 列表 - 对整数排序,然后对字符串进行排序

Python 列表 - 对整数排序,然后对字符串进行排序

慕田峪9158850 2021-08-14 17:19:39
我需要使用该sorted()函数才能从这里获得:test2 = [1,'2',3,'4',5,'A']到这里(创建一个新列表,它首先包含已排序的整数,然后是已排序的字符串):test2 = [1,3,5,'2','4','A']
查看完整描述

3 回答

?
眼眸繁星

TA贡献1873条经验 获得超9个赞

sorted(test2, key=lambda x: (isinstance(x, str), x))

这依赖于False < True元组按字典顺序排序的事实。

更多细节:

元组通常用于按多个指标进行排序。考虑一下:

key=lambda x: isinstance(x, str)

key关键字参数来sorted告诉它由给定的调用,而不是由vaules自己的结果值进行排序。此键将返回False整数和True字符串。由于False相当于0Trueto1False被认为更小,所有整数将在列表中排在第一位。

这只是我们想要的一半,因为整数和字符串之间没有排序。这是元组进来的。上面的关键功能:

key=lambda x: (isinstance(x, str), x)

为每个元素返回一个元组。元组首先按它们的第一个元素排序。如果两个元组具有等效的第一个元素,则比较它们的第二个元素,依此类推。这称为词典排序。假设我们有这个列表:

this = ["a", 5, "b", 3]

key 函数将按顺序返回:

(True, "a"), (False, 5), (True, "b"), (False, 3)

元组将首先按它们的第一个元素(布尔值)排序:

(False, 5), (False, 3), (True, "a"), (True, "b")

现在,我们有两对元组,它们的第一个元素相等。每对将按其第二个元素在内部排序:

(False, 3), (False, 5), (True, "a"), (True, "b")

最终结果不是元组本身,而是每个元组的关键函数的相应输入:

[3, 5, "a", "b"]

实际上,该算法不需要“两次”排序,但概念上是相同的。


查看完整回答
反对 回复 2021-08-14
  • 3 回答
  • 0 关注
  • 261 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信