Python 如何将字符串输入转换为包含整数和字符串的元组
我正在尝试编写一个函数,它接受提供的字符串并将其转换为元组。例如,给定这一行:Python 如何将字符串输入转换为包含整数和字符串的元组,python,string,python-2.7,Python,String,Python 2.7,我正在尝试编写一个函数,它接受提供的字符串并将其转换为元组。例如,给定这一行: '1/2/3/some text and 5/4=3' 我希望输出如下: (1, 2, 3, 'some text and 5/4=3') 我知道我可以使用split函数,但我不知道如何对其进行切片,因此从“some text”开始的文本被视为字符串,而不是分隔的 任何帮助都将不胜感激 可以使用以下参数限制拆分的数量: str.split([sep[,maxslit]]) 使用sep作为分隔符字符串,返回字符串中
'1/2/3/some text and 5/4=3'
我希望输出如下:
(1, 2, 3, 'some text and 5/4=3')
我知道我可以使用split函数,但我不知道如何对其进行切片,因此从“some text”开始的文本被视为字符串,而不是分隔的
任何帮助都将不胜感激 可以使用以下参数限制拆分的数量:
str.split([sep[,maxslit]])
使用sep作为分隔符字符串,返回字符串中的单词列表。如果给定maxsplit,则最多完成maxsplit拆分 您需要3次拆分:
>>> line = '1/2/3/some text and 5/4=3'
>>> values = line.split('/', 3)
>>> values
['1', '2', '3', 'some text and 5/4=3']
要获取整数,我需要将类型列表映射到以下值:
>>> types = [int, int, int, str]
>>> [type(value) for type, value in zip(types, values)]
[1, 2, 3, 'some text and 5/4=3']
如果无法处理该行,则可能是因为尝试将字符串转换为整数失败。它还可能生成少于4个值的列表
您可以将其包装在try/except
块中:
def parse(line):
values = line.split('/', 3)
if len(values) < 4:
return None
else:
types = [int, int, int, str]
try:
return tuple(type(value) for type, value in zip(types, values))
except ValueError:
return None
可以使用以下参数限制拆分的数量:
str.split([sep[,maxslit]])
使用sep作为分隔符字符串,返回字符串中的单词列表。如果给定maxsplit,则最多完成maxsplit拆分 您需要3次拆分:
>>> line = '1/2/3/some text and 5/4=3'
>>> values = line.split('/', 3)
>>> values
['1', '2', '3', 'some text and 5/4=3']
要获取整数,我需要将类型列表映射到以下值:
>>> types = [int, int, int, str]
>>> [type(value) for type, value in zip(types, values)]
[1, 2, 3, 'some text and 5/4=3']
如果无法处理该行,则可能是因为尝试将字符串转换为整数失败。它还可能生成少于4个值的列表
您可以将其包装在try/except
块中:
def parse(line):
values = line.split('/', 3)
if len(values) < 4:
return None
else:
types = [int, int, int, str]
try:
return tuple(type(value) for type, value in zip(types, values))
except ValueError:
return None
试试看:
结果=元组(如果i<3,则为int(part),否则为i的部分,枚举中的部分(text.split('/',3)))
如果len(结果)<3:
结果=无
除值错误外:
结果=无
text.split(“/”,3)
在斜杠上拆分,但最多拆分3次,即最多拆分为4个部分
int(部分),如果我<3
尝试将前3项解析为整数。如果其中任何一个看起来不是整数,则会引发ValueError
,这将导致结果为None
尝试:
结果=元组(如果i<3,则为int(part),否则为i的部分,枚举中的部分(text.split('/',3)))
如果len(结果)<3:
结果=无
除值错误外:
结果=无
text.split(“/”,3)
在斜杠上拆分,但最多拆分3次,即最多拆分为4个部分
int(部分),如果我<3
尝试将前3项解析为整数。如果其中任何一个看起来不是整数,则会引发ValueError
,这将导致结果为None
您可以使用类似的:
给出:
(1, 2, 3, 'some text and 5/4=3')
如果string='1/4/5/2/3/一些文本和5/4=3'
它给出:
None
您可以使用类似于:
给出:
(1, 2, 3, 'some text and 5/4=3')
如果string='1/4/5/2/3/一些文本和5/4=3'
它给出:
None
最后一个
/
与其他部分有什么不同?向我们解释它就像我们是机器人一样。在输出或输入中?@Wintress:在输入中。是什么使最后一个/
与其他的不同?向我们解释它就像我们是机器人一样。在输出或输入中?@Wintress:在输入中。这假设没有以'1/2/3/4/一些文本和10/5=2'形式出现的字符串。它可能是需要的,也可能不是。@TigerhawkT3我们需要一个更大的测试套件。它只是前三个值,因此如果给你12/a/412/3/4/这里有一些随机文本,比如5/4=3
,程序将返回None
。你不需要将数字转换成整数吗?是的,但仅当有三个值时。这假定没有以'1/2/3/4/某些文本和10/5=2'
形式出现的字符串。它可能是需要的,也可能不是。@TigerhawkT3我们需要一个更大的测试套件。它只是前三个值,因此如果给你12/a/412/3/4/这里有一些随机文本,比如5/4=3
,程序将返回None
。你不需要将数字转换成整数吗?是的,但仅当有三个值时。如果超过三个值/数字,则应返回None
。立即修复。但是当事先知道确切的数字时,这可能有点过头了。如果超过三个值/数字,它应该返回None
。现在修复。但是,如果事先知道确切的数字,这可能有点过头了。