2016-05-24 8 views
-1

Ich habe eine Liste wie folgt aus:Wie man eine Liste von Zahlen aus Zeichenfolgen in einer Liste von Listen in Python machen

[[['(0,1,2)','(3,4,5)'],['(5,6,7)','(9,4,2)']],[['(0,1,2)','(3,4,5)'],['(5,6,7)','(9,4,2)']]] 

Und ich möchte etwas bekommen, wie:

[[[[0,1,2],[3,4,5]],[[5,6,7],[9,4,2]]],[[[0,1,2],[3,4,5]],[[5,6,7],[9,4,2]]] 

Ich habe versucht, String-Verständnis, das Re-Modul, Splitting, Strippen, aber keiner scheint zu funktionieren. Vielen Dank!

+0

konvertieren '(0,1,2)' schaut auf [0 , 1,2] können Sie unten [int (i) für i in re.split verwenden (r "\\ (| \\) |,", '(0,1,2)') [1: -1] ] – ndas

Antwort

3

Rekursion scheint ganz einfach:

l = [[['(0,1,2)','(3,4,5)'],['(5,6,7)','(9,4,2)']],[['(0,1,2)','(3,4,5)'],['(5,6,7)','(9,4,2)']]] 

def convert(x): 
    if isinstance(x, list): 
     return [convert(y) for y in x] 
    else: 
     return [int(y) for y in x.strip('()').split(',')] 

convert(l) # [[[[0, 1, 2], [3, 4, 5]], [[5, 6, 7], [9, 4, 2]]], [[[0, 1, 2], [3, 4, 5]], [[5, 6, 7], [9, 4, 2]]]] 
+0

funktioniert wie ein Charme, danke !!! –

+0

Übrigens, wie würden Sie die Liste dekonvertieren? –

+0

@ThomYorke Wenn Sie meinen, die Liste in das ursprüngliche Format zurück zu konvertieren, würde ich dieselbe Art von rekursiver Funktion schreiben, die die Rekursion stoppen würde, wenn sie auf eine Unterliste trifft, deren Elemente Ganzzahlen (und keine Listen) sind. Dann würde ich diese Unterliste in eine Zeichenfolge umwandeln und sie an den Aufrufer zurückgeben. – niemmi

0

Im Fall, dass Sie sehen, wie es in verschachtelter Liste Comprehensions

startList = [[['(0,1,2)','(3,4,5)'],['(5,6,7)','(9,4,2)']],[['(0,1,2)','(3,4,5)'],['(5,6,7)','(9,4,2)']]] 
new = [[[[int(x) for x in moreSub.strip("()").split(",")] for moreSub in subitem] for subitem in item] for item in startList] 
print(new) 
Verwandte Themen