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



我有一个以下格式的字符串。

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

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

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

我认为可以使用正则表达式完成,但是我在表达式本身方面遇到麻烦。

谢谢

当然,可以使用正则表达式来完成。但是我发现只使用字符串方法并列出综合来完成此类事情通常会容易得多。

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

no,这不能用Regexes完成,因为这些只会输出字符串。您需要通过逗号分开,然后再次按空间分开每个元素:

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

您可以尝试使用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

的解析

您可以添加括号:

>>> 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文字结构组成:字符串,字节,数字,元组,列表,dict,sets,booleans和none。

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

最新更新