2016-11-30 9 views
1

ich mich gefragt, ob es möglich ist, eine Zeichenfolge wie folgt zu konvertieren:Python Umwandlung Reihe von verschiedenen Arten von Variablen in Tupel

"0, Hello, [item1, item2]" 

in diese:

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

in Python 3. Wenn seine mögliche , wie mache ich es ?

Dies ist, wo ich dies benötigen:

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

Da der Eingang immer einen String zurückgibt ich nicht die angegebenen Werte in meinem Programm verwenden kann.

+0

ist es fixiert lengt h? Werden die letzten beiden Punkte immer so sein? – themistoklik

+0

warum nicht split ?? –

+1

geteilt über _? @ ΦXocê 웃 Пepeúpa ツ – Jarvis

Antwort

1

Ich weiß nicht, ob dies die Lösung ist die OP erreichen will, wie ich denn item1 und item2 zwei sind Variablen, die bereits zugeordnet sind:

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)) 

Ergebnis:

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

Nun, sollte so funktionieren:

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

kehrt:

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

Jetzt haben Sie die 3 gewünschten Elemente und Sie können das letzte Element in einer Liste der Elemente aufgeteilt.

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

Returns:

['item1', 'item2'] 

Nach der letzten Zeile können Sie die Elemente umwandeln, falls erforderlich. So ähnlich:

[int(a) for a in c] 

würde Ihnen Integer-Darstellung Ihrer Listenelemente geben.

+0

Überprüfen Sie die Ausgabe von dem, was Sie geschrieben haben, ist es das gleiche wie vom OP gefordert? – Jarvis

+0

Beachten Sie, dass '[item1' und' item2] 'hier zwei getrennte Elemente sind. – Maroun

+0

Warum machen Sie nutzlose Änderungen, Ihre Methode ist einfach falsch. – Jarvis

0

einfachste Lösung für Ihr Problem eingegeben wird separat 3 mal zu lesen. Andere als das können Sie tun

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

Liste enthält Zeichenfolge Inhalt. Sie können sie auf die entsprechenden Werte umwandeln. Wenn sie bekannte Variablen sind, versuchen Sie es mit eval(). Stellen Sie sicher, Eingang zu sanieren, wenn Sie eval tun verwenden

0

können Sie verwenden regex:

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

Es sollte '(0," Hallo ", [item1, item2])' , nicht '('0', 'Hallo', '[item1, item2]')'. – Mohammad

+0

@MK Das kann nicht sein, es ist kein gültiges Python. 'item1' ist ein String, kann nicht sein "' '' und '' 'sind die gleichen für die Darstellung einer Zeichenkette. – Maroun

+0

Warum?' item1' und 'item2' sind nur zwei Variablen. – Mohammad

Verwandte Themen