伊莉討論區

標題: 請問python含有英文字和數字的字串list要怎麼按照字串內的數字排序? [打印本頁]

作者: bed321654987    時間: 2017-10-20 12:57 PM     標題: 請問python含有英文字和數字的字串list要怎麼按照字串內的數字排序?

本帖最後由 bed321654987 於 2017-10-22 05:49 PM 編輯

請問含有英文字和數字的字串list要怎麼按照字串內的數字排序,我用sorted函數弄不出來
其實我是用os.listdir函數讀文件夾的檔名,出來的list如下
['10_PT', '11_PT', '12_PT', '13_PT', '15_PT', '16_PT', '17_PT', '18_PT', '19_PT', '1_PT', '20_PT', '21_PT', '22_PT', '23_PT', '24_PT', '25_PT', '26_PT', '2_PT', '3_PT', '4_PT', '5_PT', '6_PT', '7_PT', '8_PT', '9_PT']
因為檔名沒有按照數字排序,我不好處理資料
我希望能排成['1_PT', '2_PT', '3_PT',〜,'26_PT']
請問用sorted函數能完成嗎?

另外,排序後我想和以下字串串接,該怎麼寫
desktop/2016-data/

作者: CoNsTaRwU    時間: 2017-10-22 12:49 AM

提示: 作者被禁止或刪除 內容自動屏蔽
作者: buluya    時間: 2017-11-6 02:29 AM

本帖最後由 buluya 於 2017-11-6 02:53 AM 編輯

我是初學者,有一個想法,用python3測試可以運作,可能顯得很麻煩:

import re
p=r"\d+"     #pattern \d代表digit(0-9) ‘+’代表至少出現一次
directory="desktop/2016-data/"
dict={}
list=['1_pt','2_pt','10_pt','12_pt']    #自己copy完整的貼上來吧

for i in list:
    dict[int(re.match(p,i).group())]=i     #用正則表達式取出digit 把他int了,然後跟字串分別作為key和value

key_in_dict=sorted(dict.keys())       #把dict的key取出來再sorted產生一個順序的list

newlist=[]
#利用list的int藉助for loop 把dict裡面的對應字串(value)
#跟“"desktop/2016-data/"”combine後順序放進newlist

for y in range(0,len(key_in_dict)):      
    newlist.append(directory+dict[key_in_dict[y]])

print(newlist)



作者: zyxton    時間: 2017-12-20 10:19 PM

提示: 作者被禁止或刪除 內容自動屏蔽




歡迎光臨 伊莉討論區 (http://wwwd.eyny.com/) Powered by Discuz!