查看完整版本: 請問python含有英文字和數字的字串list要怎麼按照字串內的數字排序?
頁: [1]

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/
...<div class='locked'><em>瀏覽完整內容,請先 <a href='member.php?mod=register'>註冊</a> 或 <a href='javascript:;' onclick="lsSubmit()">登入會員</a></em></div><div></div>

CoNsTaRwU 發表於 2017-10-22 12:49 AM

至少 specify 一下這是什麼語言吧…

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

print(newlist)


...<div class='locked'><em>瀏覽完整內容,請先 <a href='member.php?mod=register'>註冊</a> 或 <a href='javascript:;' onclick="lsSubmit()">登入會員</a></em></div>

zyxton 發表於 2017-12-20 10:19 PM

本帖最後由 zyxton 於 2017-12-20 10:23 PM 編輯

可以根據字段前半部分的數字結合lambda進行排序,如下:
data = ['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']
sortedData = sorted(data, key = lambda d: int(d.split("_")))
頁: [1]