我有一个如下所示的列表:
["A", "X", "B", "3", "5", "1"]
我正在尝试找到一种方法来对此进行排序,因此它看起来像这样:
["X", "B", "A", 1, 3, 5]
我创建了一个小函数,在适当的情况下将列表字符串转换为整数:
def convert_list(list_to_convert: list) -> list:
"""If a list contains strings where some should be ints, this attempts to
convert them to ints where appropriate"""
converted_list = []
for item in list_to_convert:
try:
item = int(item)
except ValueError:
pass
converted_list.append(item)
return converted_list
Run Code Online (Sandbox Code Playgroud)
这给了我["A", "X", "B", 3, 5, 1]
但我不确定如何让这个列表按字母降序排序,同时按升序排序整数。
我试过这个:
sorted_int_grade_list = sorted(
ordered_grade_list, key=lambda i: (isinstance(i, int), i)
)
Run Code Online (Sandbox Code Playgroud)
但这给了我["A", "B", "X", 1, 3, 5]
(阿尔法是错误的方向,整数是正确的)
我不确定如何以两种不同的方式对此进行排序 - 任何想法都会有帮助。
您可以首先将它们分成两个列表,对每个列表进行排序,然后合并它们:
lst = ["A", "X", "B", "3", "5", "1"]
letters = []
numbers = []
for x in lst:
try:
numbers.append(int(x))
except ValueError:
letters.append(x)
output = [*sorted(letters, reverse=True), *sorted(numbers)] # uses generalized unpacking: PEP 448
print(output) # ['X', 'B', 'A', 1, 3, 5]
Run Code Online (Sandbox Code Playgroud)