2013-11-21 60 views
-3

我想按升序排列Python中的列表。如何在Python中對列表進行排序?

下面是我的代碼 -

children=zk.get_children("/my/example", watch=my_func) 
print(children) 

所以上面打印語句將打印出這樣的事情 -

[u'test2', u'test1', u'test3'] 

or 

[u'test3', u'test2', u'test1'] 

或以任何順序..

現在我需要做確定分類後應該看起來像這樣按升序排列

[u'test1', u'test2', u'test3'] 

任何想法如何在Python中有效地完成這項工作?

注:名字將永遠開始test再接着some number

+2

字典排序或按數字排序? –

+3

你有什麼嘗試?您是否閱讀過關於['list.sort'](http://docs.python.org/2/library/stdtypes.html#mutable-sequence-types)和['sorted']的文檔(http:// docs .python.org/2 /庫/ functions.html#排序)? –

回答

4

嘗試sorted()功能:

>>> sortedList = sorted([u'test3',u'test2',u'test5']) 
>>> print sortedList 
[u'test2', u'test3', u'test5'] 
4

假設你想通過測試號的數組進行排序,你可以通過sorted一個key功能將在每次'test'年底提取號碼:

>>> tests = [ "test%s" % i for i in range(1, 15) ] 
>>> sorted(tests, key=lambda t: int(t[4:])) 
['test1', 'test2', 'test3', 'test4', 'test5', 'test6', 'test7', 'test8', 
'test9', 'test10', 'test11', 'test12', 'test13', 'test14'] 
2

你需要的是一個自然排序:

import re 

convert = lambda text: int(text) if text.isdigit() else text.lower() 
alphanum_key = lambda key: [ convert(c) for c in re.split('([0-9]+)', key) ] 

def natural_sort(l): 
    return sorted(l, key=alphanum_key) 

,然後如果你想它扭轉,再加入reverse=True說法你做

lst.sort(key=natural_sort) 

。如果您不想排序(但創建一個新列表),請改爲使用sorted(lst, key=natural_sort)