看板 Python 關於我們 聯絡資訊
大家好,第一次在這個版問這種問題 如果問題太簡單真的不好意思 >>> 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
laba5566: isdigit() ?02/18 06:52
isdigit()會回傳boolean,我中途有想用,請問有接續嗎? ※ 編輯: ntumath (140.112.252.182), 02/18/2017 07:02:21
Sisssy: [int(i.replace(',','')) if ',' in i else i for i in a]02/18 07:40
Sisssy: 但這是假設你的數字都有, 然後你的字串都沒有, XD02/18 07:41
Sisssy: [int(i.replace(',','')) if i[0].isdigit() else i for i02/18 07:45
Sisssy: in a]02/18 07:45
Sisssy: 這樣應該可以 但這需要你的字串都確定不會有數字開頭02/18 07:45
Sisssy: [int(i) if float(i).is_integer() else float(i) for i i02/18 07:52
Sisssy: in a] 第二個問題02/18 07:52
Sisssy,謝謝你的回答,不過第一個問題我發現我要處理的資料還真的有一些項是數字開 頭的,這些項如果想要繼續保持字串,可以以list comprehension的方式達到嗎?
uranusjr: 最好的方法還是你改一下習慣, 每個語言都有慣用的做法02/18 09:23
uranusjr: Python 在這裡用 try block 應該是最 idiomatic 的寫法02/18 09:23
※ 編輯: ntumath (140.112.252.182), 02/18/2017 11:42:38 ※ 編輯: ntumath (140.112.253.33), 02/18/2017 12:16:13
ZolaEmile: [s*s.isalpha() or eval(s.replace(',','')) for s in 02/19 00:11
ZolaEmile: a] 02/19 00:11
Sisssy: 其實最好還是用try 比較pythonic的作法 XD 02/22 07:55