如何在Python中对列表进行排序?
问题描述:
我想按升序排列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
。
答
尝试sorted()
功能:
>>> sortedList = sorted([u'test3',u'test2',u'test5'])
>>> print sortedList
[u'test2', u'test3', u'test5']
答
假设你想通过测试号的数组进行排序,你可以通过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']
答
你需要的是一个自然排序:
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)
。
字典排序或按数字排序? –
你有什么尝试?您是否阅读过关于['list.sort'](http://docs.python.org/2/library/stdtypes.html#mutable-sequence-types)和['sorted']的文档(http:// docs .python.org/2 /库/ functions.html#排序)? –