Python-如何对字母和数字值列表进行排序?

时间:2018-10-04 23:46:44

标签: python list sorting

有没有一种快速的方法可以对列表进行排序:

list = ['J', 'E', 3, 7, 0]

为了在python中获得这个(首先是数字,然后是字母)? :

list = [0, 3, 7, 'E', 'J']

3 个答案:

答案 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]