对值包含(str)数字或字母的列表进行排序

如何对包含字符串数字和字母的列表进行排序,即先对数字进行排序,然后再按字母顺序对字母进行排序?

my_list = ["10","2","1","5","a","b","c"]

disable_sorted_list
"1","2","5","10","a","b","c"

回答

使用适当的键函数排序:

>>> sorted(my_list, key=lambda s: (not s.isdigit(), int(s) if s.isdigit() else s))
['1', '2', '5', '10', 'a', 'b', 'c']

排序键(not s.isdigit(), int(s) if s.isdigit() else s)是一对(元组)

(bool, str|int)

由于元组按字典顺序排序(按元素进行比较,决定第一个不相等的元素),因此数字在前 ( False < True)。

我们在排序键中将数字转换为整数,因此它们不会按字母顺序排序

3 < 10  # but 
"10" < "3"


以上是对值包含(str)数字或字母的列表进行排序的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>