2016-09-20 2 views
1

Mylists = [['A B', 'AB C', 'ABC D'], ['C', 'DE F', 'A B']]Anfügen von Listen von Listen in eine Liste

Wie bekomme ich eine Liste wie: Myli = [[A, B, A, B, C, A, B, C, D] [ 'C', 'D', 'E', 'F', 'A', 'B']]

Hier ist mein Code:

x = [] 
myli = [] 

for item in Mylists: 
    for i in range(len(item)): 
     x.extend(item[i].split()) 
    myli.append(x) 
+1

Sie x innen initialisieren müssen die äußere Forloop. – algrebe

Antwort

2

Sie benötigen x innerhalb der initialisieren äußere Forloop.

Ihr Code

Mylists = [['A B','A B C','A B C D'],['C','D E F','A B']] 
x = [] 
myli = [] 

for item in Mylists: 
    for i in range(len(item)): 
     # BUG: since x is not reinitialized, it contains the same old 
     # memory address that was appended to myli 
     # extending x means you are modifying the x that you previously appended to myli 
     # infact, every appended x is the same x ! 
     x.extend(item[i].split()) 

    # appending the same old x, which will inevitably be modified 
    # in the next iteration 
    myli.append(x) 

Korrektur

Mylists = [['A B','A B C','A B C D'],['C','D E F','A B']] 
myli = [] 

for item in Mylists: 
    x = [] # reinitialize x 
    for i in range(len(item)): 
     x.extend(item[i].split()) 
    myli.append(x) 
+0

Danke. Kannst du erklären, warum ich x in der äußeren Schleife reinitialisieren muss? um das x jedesmal zu leeren? – Kun

+0

@Fox fügte eine Erklärung hinzu. lassen Sie es mich wissen, wenn Sie mehr Klarheit brauchen. – algrebe

+0

Danke für Hilfe, das macht Sinn. – Kun

0

Unter der Annahme, dass mylist eine Liste von Listen von Strings ist, wo Wörter durch Leerzeichen getrennt sind:

ml = [['A B','A B C','A B C D'],['C','D E F','A B']] 
l = [] 
for inner in ml: 
    newinner = [] 
    for innerstr in inner: 
     for word in innerstr.split(' ') 
       newinner.append(word) 
    l.append(newinner)