如何按字母顺序排序整数

14

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

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个回答

29
sorted(integers, key=str)

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

解释: str 是一个将整数转换为字符串的函数。由于sorted默认按字母顺序对字符串进行排序,因此此操作正是您所要求的。


11

你可以简单地使用str作为key

sorted(integers<b>,key=str</b>)
所以,对于每个元素,都调用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]

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)

>>> 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)

0

1
虽然这理论上回答了问题,但最好在此处包含答案的基本部分,并提供参考链接。 - Toby Speight

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]

1
但他希望将结果列表作为整数返回。 - Christian Dean
1
你的排序调用也不需要做它正在做的事情。与其他答案类似,只需通过一个键参数传递你的列表即可。 - idjaw
那是更好的答案,但这个也可以运行,而且这就是我最初写的。我只是不知道关键字参数。 - Alter

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接