2024-04-24 23:25:43 发布
网友
我有一个字符串"1,2",我正试图解析成(1, 2),而不只是基于,进行拆分。我直觉地想了一些事情:
"1,2"
(1, 2)
,
from typing import Tuple t = Tuple[int, int]("1,2")
这显然不起作用,但将特定的元组类型(int,int)转换为字符串进行解析似乎是合乎逻辑的。思想?你知道吗
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它。你知道吗
typing
eval
手动解析非常简单,只需在,上拆分并将每个元素转换为int:
int
your_string = "1,2" tuple(int(i) for i in your_string.split(","))
eval它允许其他数据类型潜入,但更“自动”(出于安全原因使用ast.literal_eval):
ast.literal_eval
import ast your_string = "1,2" ast.literal_eval(your_string)
Tomothy32提到的基于逗号拆分的手动解析是正确的。 您也可以使用地图进行上述操作,如下所示-
对于像
"1,2"
这样的简单输入,","
上的拆分是最简单的解决方案。你知道吗如果输入更复杂-可能包含空格,或者有许多可能的分隔符-可以编写生成整数的生成器:
通常情况下,有一个itertools one liner做同样的事情:
但是正则表达式既简洁又可读:
typing
模块用于完全不同的事物(类型暗示)。据我所知,做这种事没有什么内在因素。您需要手动解析或eval
它。你知道吗手动解析非常简单,只需在
,
上拆分并将每个元素转换为int
:eval
它允许其他数据类型潜入,但更“自动”(出于安全原因使用ast.literal_eval
):相关问题 更多 >
编程相关推荐