我有一个可以表示整数和名称的字符串列表。 默认字符串比较执行以下操作:
sorted(['1','2','3','4','10','102','14','Alice','John','Sally'])
['1', '10', '102', '14', '2', '3', '4', 'Alice', 'John', 'Sally']
我想对名单进行如下排序:
^{pr2}$也就是说:
我试过使用compare方法,但是我不知道如何在不使用try/except的情况下清楚地确定字符串是否代表整数?在
提前谢谢
以下内容在Python 2和Python 3中都适用:
它通过对列表进行分区来避免将字符串与int进行比较。避免这种比较的原因是它要么是not fully specified(Python2)要么是禁止的(Python3)。在
如果没有负数:
以下是一个不依赖CPython细节并与Python 3配合使用的版本:
^{pr2}$这里的键是元组。元组中的第一项是数字或文本的0或1,这将导致数字在文本之前排序。然后,元组中的第二项是值,这将导致值在其组中进行适当的排序。我最初使用
float("+inf")
使文本项按数字排序,但这种方法(受tomzych的答案启发)更简单、更快。在如果希望字符串排序不区分大小写,只需添加
.lower()
:这应该适用于具有键函数的
sort
版本。在相关问题 更多 >
编程相关推荐