2015-10-30 57 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']