2015-10-30 58 views
0

排序我有一个字符串列表,其中每个字符串包含在第二部分datestring,如:高级列表与拉姆达

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

现在我希望有命令他们对于上升的日期。我认为这样可以这样工作:

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

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

回答

1

查找为sort的文档,它明确状态*到位 *和返回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

L.sort()就地排序列表返回None,你想要的sorted功能:

排序(迭代器,钥匙=无,反转= FALSE)
返回一个包含从可迭代升序排列的所有项目一个新的列表。

slist = sorted(alist, key=lambda k: int(k.split('_')[-1])) 
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']