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

Jor*_*ios -3 python

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

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

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

Run Code Online (Sandbox Code Playgroud)

sch*_*ggl 5

使用适当的键函数排序:

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

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

(bool, str|int)
Run Code Online (Sandbox Code Playgroud)

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

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

3 < 10  # but 
"10" < "3"
Run Code Online (Sandbox Code Playgroud)