Python将不同类型变量的字符串转换为元组

时间:2016-11-30 07:09:02

标签: python string tuples

我想知道是否可以转换这样的字符串:

"0, Hello, [item1, item2]" 

进入这个:

(0, "Hello", [item1, item2]) 

在python 3.如果可能,我该怎么做?

这是我需要的地方:

A = input("Give me a integer, string and a list\n")

因为输入总是返回一个字符串,所以我不能在程序中使用给定的值。

4 个答案:

答案 0 :(得分:1)

我不知道这是否是OP希望实现的解决方案,因为我认为item1item2是已经分配的两个变量:

sample = '0, Hello, [item1, item2]'
item1, item2 = 'A string', True
groups = re.match(r'(\d+),\s?(\w+),\s?(\[(\w+,\s?)*\w+\])', sample)
result = int(a.group(1)), a.group(2), eval(a.group(3))

结果:

(0, 'Hello', ['A string', True])

答案 1 :(得分:0)

对您的问题最简单的解决方案是单独读取输入3次。除此之外你可以做到

input = input.split(',')
#cast it or not
number = int(input[0])
string = input[1]
list = ','.join(input[1:])
final = tuple([number,string,list])

列表包含字符串内容。将它们转换为适当的值,或者如果它们的已知变量尝试使用eval()。如果使用eval

,请确保清理输入

答案 2 :(得分:0)

您可以使用正则表达式:

>> import re
>> s = '0, Hello, [item1, item2]'
>> tuple(re.split(',+(?![^\[]*\])', s))
('0', ' Hello', ' [item1, item2]')

答案 3 :(得分:-1)

那么,应该这样工作:

import re
a = "0, Hello, [item1, item2]"
b = re.findall("|".join([r"\[.*\]", r"[0-9]", r"[a-zA-Z]+"]), a)

返回:

['0', 'Hello', '[item1, item2]']

现在您有3个所需元素,您可以将最后一个元素拆分为项目列表。

c = b[2][1:-1].split(", ")

返回:

['item1', 'item2']

在最后一行之后,您可以根据需要转换项目。像那样:

[int(a) for a in c]

将为您提供列表元素的整数表示。