第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

如何對(duì)python中設(shè)置的字母數(shù)字進(jìn)行排序

如何對(duì)python中設(shè)置的字母數(shù)字進(jìn)行排序

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

3 回答

?
largeQ

TA貢獻(xiàn)2039條經(jīng)驗(yàn) 獲得超8個(gè)贊

簡(jiǎn)短而甜美:


sorted(data, key=lambda item: (int(item.partition(' ')[0])

                               if item[0].isdigit() else float('inf'), item))

這個(gè)版本:


適用于Python 2和Python 3,因?yàn)椋?/p>

它不假定您比較字符串和整數(shù)(在Python 3中不起作用)

它不使用cmp參數(shù)sorted(Python 3中不存在)

如果數(shù)量相等,將按字符串部分排序

如果要完全按照示例中的說明打印輸出,則:


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)


查看完整回答
反對(duì) 回復(fù) 2019-11-12
?
慕沐林林

TA貢獻(xiàn)2016條經(jīng)驗(yàn) 獲得超9個(gè)贊

Jeff Atwood討論了自然排序,并舉例說明了使用Python進(jìn)行排序的一種方法。這是我的變化形式:


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

此方法的一個(gè)優(yōu)點(diǎn)是,當(dāng)字符串之間用空格分隔時(shí),該方法不僅有用。它也適用于其他分隔符,例如版本號(hào)中的句點(diǎn)(例如1.9.1在1.10.0之前)。


查看完整回答
反對(duì) 回復(fù) 2019-11-12
?
慕桂英3389331

TA貢獻(xiàn)2036條經(jīng)驗(yàn) 獲得超8個(gè)贊

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']

對(duì)于Python3,有必要對(duì)其進(jìn)行一些修改(此版本在Python2中也可以正常使用)


def keyfunc(s):

? ? return [int(''.join(g)) if k else ''.join(g) for k, g in groupby('\0'+s, str.isdigit)]


查看完整回答
反對(duì) 回復(fù) 2019-11-12
  • 3 回答
  • 0 關(guān)注
  • 1472 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)