以下是从python shell发出的:
>>> import locale
>>> locale.setlocale(locale.LC_ALL, '')
'English_United States.1252'
>>> c = [u'9', u'9', u'54', u'51', u'48', u'48', u'47', u'46', u'46', u'45', u'44', u'44', u'43', u'43', u'43', u'42', u'42', u'41', u'41', u'41', u'41', u'41', u'40', u'38', u'38', u'38', u'38', u'37', u'37', u'37', u'36', u'36', u'36', u'36', u'35', u'35', u'35', u'35', u'35', u'35', u'35', u'34', u'34', u'33', u'33', u'33', u'33', u'33', u'32', u'32', u'32', u'31', u'31', u'31', u'30', u'30', u'29', u'29', u'29', u'29', u'29', u'29', u'29', u'26', u'26', u'25', u'25', u'25', u'24', u'24', u'24', u'24', u'23', u'2', u'17', u'16', u'12', u'1', u'1', u'1', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0']
>>> sorted(c,locale.strcoll)
[u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'1', u'1', u'1', u'12', u'16', u'17', u'2', u'23', u'24', u'24', u'24', u'24', u'25', u'25', u'25', u'26', u'26', u'29', u'29', u'29', u'29', u'29', u'29', u'29', u'30', u'30', u'31', u'31', u'31', u'32', u'32', u'32', u'33', u'33', u'33', u'33', u'33', u'34', u'34', u'35', u'35', u'35', u'35', u'35', u'35', u'35', u'36', u'36', u'36', u'36', u'37', u'37', u'37', u'38', u'38', u'38', u'38', u'40', u'41', u'41', u'41', u'41', u'41', u'42', u'42', u'43', u'43', u'43', u'44', u'44', u'45', u'46', u'46', u'47', u'48', u'48', u'51', u'54', u'9', u'9']
输出未排序。有u'16', u'17', u'2'
然后是u'23'
。
不知道这里发生了什么。有人可以帮忙吗?
答案 0 :(得分:3)
您需要按数字排序,而不是文本。试试这个:
myList.sort(key=int)
int函数在排序之前在每个元素中运行,强制它将字符串排序为整数。
答案 1 :(得分:3)
令人着迷的是,优雅而简洁的sorted()
包含了多少。来自文档,http://docs.python.org/2/library/functions.html#sorted:
key指定用于提取a的一个参数的函数 每个列表元素的比较键:key = str.lower。默认 value为None(直接比较元素)。
因此,在调用sorted()
时,可以在列表中强制转换元素:
>>> c = [u'9', u'9', u'54', u'51', u'48', u'48', u'47', u'46', u'46', u'45', u'44', u'44', u'43', u'43', u'43', u'42', u'42', u'41', u'41', u'41', u'41', u'41', u'40', u'38', u'38', u'38', u'38', u'37', u'37', u'37', u'36', u'36', u'36', u'36', u'35', u'35', u'35', u'35', u'35', u'35', u'35', u'34', u'34', u'33', u'33', u'33', u'33', u'33', u'32', u'32', u'32', u'31', u'31', u'31', u'30', u'30', u'29', u'29', u'29', u'29', u'29', u'29', u'29', u'26', u'26', u'25', u'25', u'25', u'24', u'24', u'24', u'24', u'23', u'2', u'17', u'16', u'12', u'1', u'1', u'1', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0']
>>> sorted(c, key=int)
[u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'1', u'1', u'1', u'2', u'9', u'9', u'12', u'16', u'17', u'23', u'24', u'24', u'24', u'24', u'25', u'25', u'25', u'26', u'26', u'29', u'29', u'29', u'29', u'29', u'29', u'29', u'30', u'30', u'31', u'31', u'31', u'32', u'32', u'32', u'33', u'33', u'33', u'33', u'33', u'34', u'34', u'35', u'35', u'35', u'35', u'35', u'35', u'35', u'36', u'36', u'36', u'36', u'37', u'37', u'37', u'38', u'38', u'38', u'38', u'40', u'41', u'41', u'41', u'41', u'41', u'42', u'42', u'43', u'43', u'43', u'44', u'44', u'45', u'46', u'46', u'47', u'48', u'48', u'51', u'54']
或者,有一个natsort
库,https://pypi.python.org/pypi/natsort,
>>> import natsort
>>> c = [u'9', u'9', u'54', u'51', u'48', u'48', u'47', u'46', u'46', u'45', u'44', u'44', u'43', u'43', u'43', u'42', u'42', u'41', u'41', u'41', u'41', u'41', u'40', u'38', u'38', u'38', u'38', u'37', u'37', u'37', u'36', u'36', u'36', u'36', u'35', u'35', u'35', u'35', u'35', u'35', u'35', u'34', u'34', u'33', u'33', u'33', u'33', u'33', u'32', u'32', u'32', u'31', u'31', u'31', u'30', u'30', u'29', u'29', u'29', u'29', u'29', u'29', u'29', u'26', u'26', u'25', u'25', u'25', u'24', u'24', u'24', u'24', u'23', u'2', u'17', u'16', u'12', u'1', u'1', u'1', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0']
>>> natsort.natsorted(c)
[u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'0', u'1', u'1', u'1', u'2', u'9', u'9', u'12', u'16', u'17', u'23', u'24', u'24', u'24', u'24', u'25', u'25', u'25', u'26', u'26', u'29', u'29', u'29', u'29', u'29', u'29', u'29', u'30', u'30', u'31', u'31', u'31', u'32', u'32', u'32', u'33', u'33', u'33', u'33', u'33', u'34', u'34', u'35', u'35', u'35', u'35', u'35', u'35', u'35', u'36', u'36', u'36', u'36', u'37', u'37', u'37', u'38', u'38', u'38', u'38', u'40', u'41', u'41', u'41', u'41', u'41', u'42', u'42', u'43', u'43', u'43', u'44', u'44', u'45', u'46', u'46', u'47', u'48', u'48', u'51', u'54']
尤其是当您的元素包含一些非数字字符串时。
>>> x = ['foo12', 'foo1', 'foo2','foo24']
>>> natsort.natsorted(x)
['foo1', 'foo2', 'foo12', 'foo24']
答案 2 :(得分:2)
字符串以lexicographic order排序。当你知道这是sort函数的工作方式时,就会产生输出。
看来你正在寻找的是一种自然的。我建议你看一下natsort package。
或者,您可以为排序实现自己的比较操作。
答案 3 :(得分:1)
据推测,您希望它们按数字顺序排序。你可以尝试这样的事情。 c
是您之前的字符串列表。您有两种选择,第一种:
sorted_c=sorted(c, key=float)
没有键功能,python会将这些数字排序为 strings 。由于'10'
在'7'
之前是按字母顺序(毕竟它以1开头),因此sort函数会将之前的放在列表中。
答案 4 :(得分:0)
你需要双重贬低:
map(unicode, sorted(map(int, c)))
答案 5 :(得分:-1)
他们是字符串。字符串按字母顺序排序。 16,17,2,23正确排序为字符串。