Python转换元组[int,int]

2024-04-24 23:25:43 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个字符串"1,2",我正试图解析成(1, 2),而不只是基于,进行拆分。我直觉地想了一些事情:

from typing import Tuple
t = Tuple[int, int]("1,2")

这显然不起作用,但将特定的元组类型(int,int)转换为字符串进行解析似乎是合乎逻辑的。思想?你知道吗


Tags: 字符串fromimporttyping类型事情int思想
3条回答

Tomothy32提到的基于逗号拆分的手动解析是正确的。 您也可以使用地图进行上述操作,如下所示-

your_input = "1,2"
your_tuple = tuple(map(int, your_input.split(',')))

对于像"1,2"这样的简单输入,","上的拆分是最简单的解决方案。你知道吗

如果输入更复杂-可能包含空格,或者有许多可能的分隔符-可以编写生成整数的生成器:

>>> data = '18 ,15 ,18,15x,19,14,20,12,13,17'
>>> def interator(data):
...     digits = []
...     for c in data:
...         if c.isdigit():
...             digits.append(c)
...         else:
...             if digits:
...                 yield int(''.join(digits))
...                 del digits[:]
...     if digits:
...         yield int(''.join(digits))
... 
>>> tuple(interator(data))
(18, 15, 18, 15, 19, 14, 20, 12, 13, 17)

通常情况下,有一个itertools one liner做同样的事情:

>>> tuple(int(''.join(s)) for _, s in 
...       filter(lambda x: x[0], itertools.groupby(data, str.isdigit)))
(18, 15, 18, 15, 19, 14, 20, 12, 13, 17)

但是正则表达式既简洁又可读:

>>> tuple(int(x.group(0)) for x in re.finditer(r'\d+', data))
(18, 15, 18, 15, 19, 14, 20, 12, 13, 17)

typing模块用于完全不同的事物(类型暗示)。据我所知,做这种事没有什么内在因素。您需要手动解析或eval它。你知道吗

手动解析非常简单,只需在,上拆分并将每个元素转换为int

your_string = "1,2"
tuple(int(i) for i in your_string.split(","))

eval它允许其他数据类型潜入,但更“自动”(出于安全原因使用ast.literal_eval):

import ast

your_string = "1,2"
ast.literal_eval(your_string)

相关问题 更多 >