如何按字母顺序排序整数

时间:2017-06-29 22:33:36

标签: python sorting alphabetical-sort

如何按字母顺序对整数进行排序?像这样:

integers = [10, 1, 101, 2, 111, 212, 100000, 22, 222, 112, 10101, 1100, 11, 0]

在Python控制台上以这样的方式打印

[0, 1, 10, 100000, 101, 10101, 11, 1100, 111, 112, 2, 212, 22, 222]

我试过这个

def sort_integers(integers):
    return sorted(integers)

但我想你必须这样做

def sort_integers(integers):
    return sorted(integers, key = lambda....... )

我只是不知道在lambda之后要写什么?

5 个答案:

答案 0 :(得分:28)

sorted(integers, key=str)

->
[0, 1, 10, 100000, 101, 10101, 11, 1100, 111, 112, 2, 212, 22, 222]

说明:str是一个将整数转换为字符串的函数。由于sorted默认按字母顺序对字符串进行排序,因此完全符合您的要求。

答案 1 :(得分:11)

您只需将str用作key

即可
sorted(integers,key=str)

因此,对于每个元素,调用str函数,将int转换为str。这本身并不壮观。但字符串的比较是不同的:它按字典顺序排序。

>>> sorted([0, 1, 10, 100000, 101, 10101, 11, 1100, 111, 112, 2, 212, 22, 222],key=str)
[0, 1, 10, 100000, 101, 10101, 11, 1100, 111, 112, 2, 212, 22, 222]

答案 2 :(得分:4)

如果要按字典顺序对整数进行排序,就好像它们是字符串一样,可以告诉Python在排序时将它们视为字符串:

>>> integers = [10, 1, 101, 2, 111, 212, 100000, 22, 222, 112, 10101, 1100, 11, 0]
>>> sorted(integers, key=lambda n: str(n))
[0, 1, 10, 100000, 101, 10101, 11, 1100, 111, 112, 2, 212, 22, 222]
>>> 

但你实际上甚至不必拥有lambda n: ...部分。您只需将str函数作为key传递,Python就会知道该怎么做。调用str(n),其中n是列表中的每个元素:

>>> sorted(integers, key=str)
[0, 1, 10, 100000, 101, 10101, 11, 1100, 111, 112, 2, 212, 22, 222]
>>>

所以你的功能最终会成为:

def sort_integers(integers):
    return sorted(integers, key=str)

答案 3 :(得分:0)

这将起作用

list(map(int, (sorted(str(i) for i in integers))))

输出:

[0, 1, 10, 100000, 101, 10101, 11, 1100, 111, 112, 2, 212, 22, 222]

答案 4 :(得分:0)

尝试Most Significant Digit Radix Sort。这避免了必须将整数转换为字符串,但除非您使用库或其他预先编写的code,否则更难实现。