2016-11-30 2 views
1

я задавался вопросом, если это возможно, чтобы преобразовать строку, как это:Python преобразования строки различных типов переменных в кортеж

"0, Hello, [item1, item2]" 

в это:

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

в питон 3. Если его можно , как мне это сделать ?

Это где я нуждаясь это:

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

Поскольку вход всегда возвращает строку, я не могу использовать заданные значения в моей программе.

+0

это фиксированная lengt час? будут ли последние два пункта всегда такими? – themistoklik

+0

Почему не использовать split? –

+1

раскол вокруг _? @ ΦXocę 웃 Пepeúpa ツ – Jarvis

ответ

1

Я не знаю, является ли это решение ОП хочет достичь, как я должен item1 и item2 являются два переменные, которые уже назначены:

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

Ну, должен работать так:

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] 

предоставит вам целочисленное представление элементов списка.

+0

Проверьте, что вы написали, это то же самое, что требуется OP? – Jarvis

+0

Обратите внимание, что '[item1' и' item2] 'являются двумя разделенными элементами здесь. – Maroun

+0

Почему вы делаете бесполезные изменения, ваш метод прост. – Jarvis

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

0

Вы можете использовать регулярное выражение:

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

Это должно быть '(0," Hello ", [item1, item2])' , а не '('0', 'Hello', '[item1, item2]')'. – Mohammad

+0

@MK Это не может быть, это не действительный Python .. 'item1' является строкой, не может быть преобразуется в имя переменной. Также '' 'и' '' одинаковы для представления строки. – Maroun

+0

Почему? 'item1' и' item2' - это всего лишь две переменные. – Mohammad

Смежные вопросы