有没有一种快速的方法可以对列表进行排序:
list = ['J', 'E', 3, 7, 0]
为了在python中获得这个(首先是数字,然后是字母)? :
list = [0, 3, 7, 'E', 'J']
答案 0 :(得分:1)
由于您要处理数字(在这种情况下为<10)和字符串,因此可以简化键并删除lambda
:
>>> sorted(lst, key=str)
[0, 3, 7, 'E', 'J']
或者更好的是,使用list.sort
进行就地排序。
>>> lst.sort(key=str)
>>> lst
[0, 3, 7, 'E', 'J']
将根据str
限定值的ASCII值对每个项目进行排序。
请注意,如果要处理的数字> = 10(极有可能),则此解决方案最终将按字典顺序对数字进行排序。为了解决这个问题,您最终将需要lambda。
>>> lst.sort(key=lambda x: (isinstance(x, str), x)))
这是@jpp的解决方案。
答案 1 :(得分:0)
您可以使用(布尔值)元组进行排序:
L = ['J', 'E', 3, 7, 0]
res = sorted(L, key=lambda x: (isinstance(x, str), x))
# [0, 3, 7, 'E', 'J']
答案 2 :(得分:0)
如果您在列表上使用list.sort()
,则会得到
TypeError: '<' not supported between instances of 'int' and 'str'
您必须将列表中的所有项目转换为字符串类型。
[str(i) for i in list]