如何对python中设置的字母数字进行排序

我有一套


set(['booklet', '4 sheets', '48 sheets', '12 sheets'])

排序后,我希望它看起来像


4 sheets,

12 sheets,

48 sheets,

booklet

有什么想法吗


冉冉说
浏览 1388回答 3
3回答

largeQ

简短而甜美:sorted(data, key=lambda item: (int(item.partition(' ')[0])                               if item[0].isdigit() else float('inf'), item))这个版本:适用于Python 2和Python 3,因为:它不假定您比较字符串和整数(在Python 3中不起作用)它不使用cmp参数sorted(Python 3中不存在)如果数量相等,将按字符串部分排序如果要完全按照示例中的说明打印输出,则:data = set(['booklet', '4 sheets', '48 sheets', '12 sheets'])r = sorted(data, key=lambda item: (int(item.partition(' ')[0])                                   if item[0].isdigit() else float('inf'), item))print ',\n'.join(r)

慕沐林林

Jeff Atwood讨论了自然排序,并举例说明了使用Python进行排序的一种方法。这是我的变化形式:import re def sorted_nicely( l ):     """ Sort the given iterable in the way that humans expect."""     convert = lambda text: int(text) if text.isdigit() else text     alphanum_key = lambda key: [ convert(c) for c in re.split('([0-9]+)', key) ]     return sorted(l, key = alphanum_key)像这样使用:s = set(['booklet', '4 sheets', '48 sheets', '12 sheets'])for x in sorted_nicely(s):    print(x)输出:4 sheets12 sheets48 sheetsbooklet此方法的一个优点是,当字符串之间用空格分隔时,该方法不仅有用。它也适用于其他分隔符,例如版本号中的句点(例如1.9.1在1.10.0之前)。

慕桂英3389331

from itertools import groupbydef keyfunc(s):    return [int(''.join(g)) if k else ''.join(g) for k, g in groupby(s, str.isdigit)]sorted(my_list, key=keyfunc)演示:>>> my_set = {'booklet', '4 sheets', '48 sheets', '12 sheets'}>>> sorted(my_set, key=keyfunc)['4 sheets', '12 sheets', '48 sheets', 'booklet']对于Python3,有必要对其进行一些修改(此版本在Python2中也可以正常使用)def keyfunc(s):    return [int(''.join(g)) if k else ''.join(g) for k, g in groupby('\0'+s, str.isdigit)]
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python