亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何對python中設置的字母數字進行排序

如何對python中設置的字母數字進行排序

冉冉說 2019-11-12 09:27:58
我有一套set(['booklet', '4 sheets', '48 sheets', '12 sheets'])排序后,我希望它看起來像4 sheets,12 sheets,48 sheets,booklet有什么想法嗎
查看完整描述

3 回答

?
largeQ

TA貢獻2039條經驗 獲得超8個贊

簡短而甜美:


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)


查看完整回答
反對 回復 2019-11-12
?
慕沐林林

TA貢獻2016條經驗 獲得超9個贊

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 sheets

12 sheets

48 sheets

booklet

此方法的一個優點是,當字符串之間用空格分隔時,該方法不僅有用。它也適用于其他分隔符,例如版本號中的句點(例如1.9.1在1.10.0之前)。


查看完整回答
反對 回復 2019-11-12
?
慕桂英3389331

TA貢獻2036條經驗 獲得超8個贊

from itertools import groupby

def 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)]


查看完整回答
反對 回復 2019-11-12
  • 3 回答
  • 0 關注
  • 1474 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號