如何将列表映射到整数

时间:2014-12-08 12:22:49

标签: python string list

我有一个连接的字符串,用逗号连接。我需要将此列表拆分为一个列表,但列表的类型必须严格按整数。

doc[column] = map(int, [v for v in value.split(',') if v and len(v)])

  

ValueError:基数为10的int()的无效文字:''

我认为添加if v然后可能会len(v)解决问题。我该怎么做?

2 个答案:

答案 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)]