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
。现在修复。但是,如果事先知道确切的数字,这可能有点过头了。