2016-12-05 5 views
0

Ich habe eine Liste von Listen wie diesekonvertieren eine Liste von Listen zu einer Liste von String

list1 = [['I am a student'], ['I come from China'], ['I study computer science']] 
len(list1) = 3 

Jetzt würde ich es in eine Liste von Zeichenfolge konvertieren möchte ähnliche

list2 = ['I', 'am', 'a', 'student','I', 'come', 'from', 'China', 'I','study','computer','science'] 
len(list2) = 12 

I bin mir bewusst, dass ich Umwandlung

new_list = [','.join(x) for x in list1] 

auf diese Weise könnte Aber es gibt

['I,am,a,student','I,come,from,China','I,study,computer,science'] 
len(new_list) = 3 

Ich habe auch versucht, diesen

new_list = [''.join(x for x in list1)] 

aber es gibt die folgenden Fehler

TypeError: sequence item 0: expected str instance, list found 

Wie kann ich jedes Wort in der Unterliste von list1 extrahieren und sie in eine Liste von String-Format konvertieren? Ich benutze Python 3 in Windows 7.

+0

list1 hat ein Element, das eine Liste mit drei Elementen ist. – bohrax

+0

Wenn list1 drei Elemente hat, sollte Ihre Frage wahrscheinlich zu "Konvertieren einer Liste von Sätzen in eine Liste von Wörtern" – bohrax

+0

@ bohrax, sorry, ich habe die Frage bearbeitet, sollte es eine Liste von Listen sein. –

Antwort

1

Nach Ihrer Bearbeitung denke ich, der transparenteste Ansatz ist jetzt derjenige, der von einer anderen Antwort angenommen wurde (eine Antwort, die seitdem gelöscht wurde, denke ich). Ich habe hinzugefügt, um es einfacher zu verstehen, einige Leerzeichen zu machen, was los ist:

list1 = [['I am a student'], ['I come from China'], ['I study computer science']] 
list2 = [ 
    word 
     for sublist in list1 
     for sentence in sublist 
     for word in sentence.split() 
] 
print(list2) 

Drucke:

['I', 'am', 'a', 'student', 'I', 'come', 'from', 'China', 'I', 'study', 'computer', 'science'] 
+0

Sorry, ich habe die Frage bearbeitet, es sollte eine Liste von Listen sein. –

+0

Siehe bearbeitete Antwort – jez

0

eine Liste von Listen gegeben, in dem jeder sublist Strings enthalten diese jez Strategie gelöst werden könnte mit wie :

list2 = ' '.join([' '.join(strings) for strings in list1]).split() 

Wo die Liste Verständnis list1 auf eine Liste von Zeichenketten verwandelt:

>>> [' '.join(strings) for strings in list1] 
['I am a student', 'I come from China', 'I study computer science'] 

Der Join wird dann einen String aus den Strings erstellen und Split erstellt eine Liste auf Leerzeichen aufgeteilt.

Wenn die Teil-Listen nur einzelne Zeichenfolgen enthalten, könnten Sie die Liste Verständnis vereinfachen:

list2 = ' '.join([l[0] for l in list1]).split() 
+0

Sollte das '' s'' nicht in der anderen Reihenfolge sein? (Ich finde das auch nicht intuitiv.) – jez

+0

@jez Ich glaube, dass es mit den Originaldaten des OP korrekt ist. Es flacht die Liste einfach in zwei Ebenen ab. Wie auch immer, die Frage wurde neu formuliert, also habe ich die Antwort bearbeitet. – bohrax

Verwandte Themen