首页 > 解决方案 > 在字符串之前对整数进行排序的高效和 Pythonic 方法

问题描述

所以我想在 Python 3 中编写一个有效的排序方法:

x = ["aa", "5", 5, "12", 12]
x.sort(key=???)

print x  // prints  [5, 12, "12", "5", "aa"]

它可以想象解决方案,但它们都涉及为每次比较动态构造对象,并且它们感觉不到pythonic。

这里一定有好的设计方案,我只是不考虑...

标签: python-3.xsorting

解决方案


编写一个根据类型返回唯一值的键,然后是值本身。我假设您也希望浮点数在字符串之前,所以假设您希望字符串最后,其他任何东西都先。

def strings_last(x):
    """When sorting, ensure strings are last."""
    if isinstance(x, str):
        return 1, x
    else:
        return 0, x

x = ["aa", "5", 5, "12", 12]
sorted(x, key=strings_last)
# [5, 12, "12", "5", "aa"]

推荐阅读