按数字对字符串列表进行排序

时间:2020-08-02 10:23:09

标签: python list sorting

我有一个看起来像这样的列表:

mylist = ['item_11', 'item_0', 'item_1', 'item_2', 'item_9', 'item_10', 'item_none']

我想对数字进行排序,但以“ item_none”开头,因此结果将如下所示:

['item_none', 'item_0', 'item_1', 'item_2', 'item_9', 'item_10', 'item_11']

我找到了一种对我有用的方法,但是它使用两个列表推导将“ item_none”重命名为“ item_-1”并返回。我想知道是否有更优雅的方法来做到这一点?感谢您的任何建议。

newlist = ['item_-1' if 'none' in x else x for x in mylist]
newlist.sort(key=lambda x: int(x.split('_')[-1]))
finallist = ['item_none' if '-1' in x else x for x in newlist]

1 个答案:

答案 0 :(得分:2)

如果列表中有-1,则可以将密钥设置为none

In [8]: mylist = ['item_11', 'item_0', 'item_1', 'item_2', 'item_9', 'item_10', 'item_none']

In [9]: mylist.sort(key=lambda x: -1 if x.split("_")[-1] == "none" else int(x.split('_')[-1]))

In [10]: mylist
Out[10]: ['item_none', 'item_0', 'item_1', 'item_2', 'item_9', 'item_10', 'item_11']