将由以','分隔的数字对组成的字符串转换为int类型的元组

时间:2018-12-17 08:02:53

标签: python arrays string

我有以下格式的字符串。

'1 2, 3 4, 5 6, 7 8'

如何将其转换为以下格式的元组列表(int类型)?

[(1,2), (3,4), (5,6), (7,8)]

我认为可以使用正则表达式来完成,但表达式本身存在问题。

谢谢

4 个答案:

答案 0 :(得分:5)

当然,可以使用正则表达式来完成。但是我发现仅使用字符串方法和列表理解来完成这些事情通常会容易得多。

s = '1 2, 3 4, 5 6, 7 8'

[tuple(int(i) for i in x.split()) for x in s.split(',')]
[(1, 2), (3, 4), (5, 6), (7, 8)]

答案 1 :(得分:0)

不,这不能用正则表达式完成,因为正则表达式只会输出字符串。您需要用逗号分割,然后再用空格分割每个元素:

[tuple(elem.split(" ")) for elem in data.split(",")]

答案 2 :(得分:0)

您可以尝试使用split(),然后列出理解力:

sample_str = '1 2, 3 4, 5 6, 7 8'
result = [
     tuple(int(v) for v in item.strip().split(' '))
     for item in sample_str.split(',')
]

编辑:已将解析添加到int

答案 3 :(得分:0)

您可以添加括号:

>>> original = '1 2, 3 4, 5 6, 7 8'
>>> modified = '[({})]'.format(original.replace(', ', '),(').replace(' ', ','))
>>> modified
'[(1,2),(3,4),(5,6),(7,8)]'

然后我们可以使用ast.literal_eval将字符串转换为整数元组列表:

>>> from ast import literal_eval
>>> literal_eval(modified)
[(1, 2), (3, 4), (5, 6), (7, 8)]

这是一种评估字符串的安全方法(不同于eval)。从literal_eval文档中:

  

安全地评估表达式节点或包含Python文字或容器显示的字符串。提供的字符串或节点只能由以下Python文字结构组成:字符串,字节,数字,元组,列表,字典,集合,布尔值和无。

     

这可用于安全地评估包含来自不受信任来源的Python值的字符串,而无需自己解析值。它无法评估任意复杂的表达式,例如涉及运算符或索引的对象。