使用lambda进行高级列表排序

时间:2015-10-30 13:21:56

标签: python list sorting lambda

我有一个字符串列表,其中每个字符串在第二部分中包含一个日期字符串,例如:

alist = ['foo_20150901', 'bar_20150801', 'baz_20150701']

现在我想让他们按日期排序。我以为这会像这样工作:

slist = alist.sort(key =(lambda k: int(k.split('_')[-1])))

但是,打印slist会产生None。这里有什么问题?

3 个答案:

答案 0 :(得分:1)

查看sort的文档, 明确 状态 * IN PLACE *并返回None

Docstring: L.sort(key=None, reverse=False) -> None -- stable sort *IN PLACE*
Type:      method_descriptor

要返回已排序的列表,您需要使用sorted代替:

In [5]: sorted??
Docstring:
Return a new list containing all items from the iterable in ascending order.

A custom key function can be supplied to customise the sort order, and the
reverse flag can be set to request the result in descending order.
Type:      builtin_function_or_method

答案 1 :(得分:1)

L.sort()对列表进行排序None,您需要sorted函数:

  

排序(可迭代,密钥=无,反向=假)
    返回一个新列表,其中包含迭代中所有项目的升序。

slist = sorted(alist, key=lambda k: int(k.split('_')[-1]))

答案 2 :(得分:1)

alist = ['foo_20150901', 'bar_20150801', 'baz_20150701']
alist.sort(key =(lambda k: int(k.split('_')[-1])))
print alist

输出:

['baz_20150701', 'bar_20150801', 'foo_20150901']