我有一个连接的字符串,用逗号连接。我需要将此列表拆分为一个列表,但列表的类型必须严格按整数。
doc[column] = map(int, [v for v in value.split(',') if v and len(v)])
ValueError:基数为10的int()的无效文字:''
我认为添加if v
然后可能会len(v)
解决问题。我该怎么做?
答案 0 :(得分:5)
您需要检查字符串是否为仅数字。您可以使用str.isdigit
:
doc[column] = [int(v) for v in value.split(',') if v.strip().isdigit()]
注意:上面不接受负整数。要处理它,您需要更多条件。
<强>更新强>
更新了处理' 1'
案例的答案:
>>> int(' 1')
1
>>> ' 1'.isdigit()
False
>>> ' 1'.strip().isdigit()
True
根据OP的评论更新:
要完成,您需要尝试float
/ int
来查看该值是否可转换为该类型。
示例:
def try_float(x):
try:
float(x)
return True
except (TypeError, ValueError):
return False
value = '1, 2.3, 4, 5, blah, 6.78'
numbers = [float(x) for x in value.split(',') if try_float(x)]
答案 1 :(得分:1)
制作一个名称很好的函数:
def converts_to_int(value):
try:
int(value)
return True
except ValueError:
return False
使用列表理解比使用map更短:
doc[column] = [int(v) for v in value.split(',') if converts_to_int(v)]