作者ntumath (math mad)
看板Python
标题[问题] List 里有字串及数字处理
时间Sat Feb 18 06:16:33 2017
大家好,第一次在这个版问这种问题
如果问题太简单真的不好意思
>>> 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://webptt.com/cn.aspx?n=bbs/Python/M.1487369795.A.C30.html
※ 编辑: ntumath (140.112.253.33), 02/18/2017 06:32:26
1F:推 laba5566: isdigit() ?02/18 06:52
isdigit()会回传boolean,我中途有想用,请问有接续吗?
※ 编辑: ntumath (140.112.252.182), 02/18/2017 07:02:21
2F:推 Sisssy: [int(i.replace(',','')) if ',' in i else i for i in a]02/18 07:40
3F:→ Sisssy: 但这是假设你的数字都有, 然後你的字串都没有, XD02/18 07:41
4F:推 Sisssy: [int(i.replace(',','')) if i[0].isdigit() else i for i02/18 07:45
5F:→ Sisssy: in a]02/18 07:45
6F:→ Sisssy: 这样应该可以 但这需要你的字串都确定不会有数字开头02/18 07:45
7F:推 Sisssy: [int(i) if float(i).is_integer() else float(i) for i i02/18 07:52
8F:→ Sisssy: in a] 第二个问题02/18 07:52
Sisssy,谢谢你的回答,不过第一个问题我发现我要处理的资料还真的有一些项是数字开
头的,这些项如果想要继续保持字串,可以以list comprehension的方式达到吗?
9F:→ uranusjr: 最好的方法还是你改一下习惯, 每个语言都有惯用的做法02/18 09:23
10F:→ 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
11F:→ ZolaEmile: [s*s.isalpha() or eval(s.replace(',','')) for s in 02/19 00:11
12F:→ ZolaEmile: a] 02/19 00:11
13F:推 Sisssy: 其实最好还是用try 比较pythonic的作法 XD 02/22 07:55