[問題] List 裡有字串及數字處理

看板Python作者 (math mad)時間8年前 (2017/02/18 06:16), 8年前編輯推噓5(508)
留言13則, 4人參與, 最新討論串1/1
大家好,第一次在這個版問這種問題 如果問題太簡單真的不好意思 >>> a = ['John','1,800','Joe','1,200'] 目標是把數字的字串型態改為整數型態 還有把數字的逗點移除 目標>> a = ['John',1800,'Joe',1200] 我自己經過網路查詢之後,有以下方法 >>> for index, item in enumerate(a): try: a[index]=int(item.replace(',','')) except ValueError: pass 雖然5行已經很少了,但我本人不是很喜歡用try和except,每次 程式失敗才想到要用,所以想問問有沒有比較好的方法,不知道 能不能用一行的表達式就可以完成這個問題? 不好意思,再多問一個問題,如果 >>> a = ['1200','0.03'] 有辦法讓 >>> a = [1200,0.03] 因為用float會變成[1200.0,0.03],我不希望1200帶小數點 --------------------------------------------------------- 謝謝大家的回答,尤其是Sisssy大 第一題: >>> [int(i.replace(',','')) if i[:].isdigit() else i for i in a] 第二題: >>> [int(i) if float(i).is_int() else float(i) for i in a] -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 140.112.253.33 ※ 文章網址: https://www.ptt.cc/bbs/Python/M.1487369795.A.C30.html ※ 編輯: ntumath (140.112.253.33), 02/18/2017 06:32:26

02/18 06:52, , 1F
isdigit() ?
02/18 06:52, 1F
isdigit()會回傳boolean,我中途有想用,請問有接續嗎? ※ 編輯: ntumath (140.112.252.182), 02/18/2017 07:02:21

02/18 07:40, , 2F
[int(i.replace(',','')) if ',' in i else i for i in a]
02/18 07:40, 2F

02/18 07:41, , 3F
但這是假設你的數字都有, 然後你的字串都沒有, XD
02/18 07:41, 3F

02/18 07:45, , 4F
[int(i.replace(',','')) if i[0].isdigit() else i for i
02/18 07:45, 4F

02/18 07:45, , 5F
in a]
02/18 07:45, 5F

02/18 07:45, , 6F
這樣應該可以 但這需要你的字串都確定不會有數字開頭
02/18 07:45, 6F

02/18 07:52, , 7F
[int(i) if float(i).is_integer() else float(i) for i i
02/18 07:52, 7F

02/18 07:52, , 8F
in a] 第二個問題
02/18 07:52, 8F
Sisssy,謝謝你的回答,不過第一個問題我發現我要處理的資料還真的有一些項是數字開 頭的,這些項如果想要繼續保持字串,可以以list comprehension的方式達到嗎?

02/18 09:23, , 9F
最好的方法還是你改一下習慣, 每個語言都有慣用的做法
02/18 09:23, 9F

02/18 09:23, , 10F
Python 在這裡用 try block 應該是最 idiomatic 的寫法
02/18 09:23, 10F
※ 編輯: ntumath (140.112.252.182), 02/18/2017 11:42:38 ※ 編輯: ntumath (140.112.253.33), 02/18/2017 12:16:13

02/19 00:11, , 11F
[s*s.isalpha() or eval(s.replace(',','')) for s in
02/19 00:11, 11F

02/19 00:11, , 12F
a]
02/19 00:11, 12F

02/22 07:55, , 13F
其實最好還是用try 比較pythonic的作法 XD
02/22 07:55, 13F
文章代碼(AID): #1OftP3mm (Python)
文章代碼(AID): #1OftP3mm (Python)