对值包含(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"