2017-10-20 9 views
0

J'ai une liste de listes de chaînes que je voudrais convertir en une liste de chaînes en ajoutant un espace entre chaque élément de la liste. par exemple.Convertir des listes de listes de chaînes dans une liste de chaînes de manière efficace

original_list = [['the', 'cat', 'in', 'the', 'hat'], ['fat', 'cat', 'sat', 'on', 'the', 'mat']] 

desired_output = ['the cat in the hat', 'fat cat sat on the mat'] 

Je comprends que je peux le faire en utilisant ceci:

desired_output 
for each in original_list: 
    desired_output.append(' '.join(each)) 

mais comme je travaille avec de grandes quantités de données am cherchons idéalement une façon plus efficace de le faire.

+0

Il devrait être ''' .join (each)' au lieu de ''' .join (each)' dans votre code –

+2

@KaushikNP Cheers - c'était une faute de frappe. – jdoe

Répondre

4

Utilisation str.join avec un espace plein ' ':

original_list = [['the', 'cat', 'in', 'the', 'hat'], ['fat', 'cat', 'sat', 'on', 'the', 'mat']] 
final_list = [' '.join(i) for i in original_list] 

Sortie:

['the cat in the hat', 'fat cat sat on the mat'] 
+1

Euh, comment est-ce une optimisation? Le PO a déjà fait cela, n'utilisant simplement pas la «compréhension de liste». –

+0

@KaushikNP 'str.join' est beaucoup plus rapide que la concaténation de chaînes car les chaînes sont immuables et ne peuvent donc pas être changées en place. – Ajax1234

+0

Mais ce n'est pas ce que l'utilisateur a fait. L'OP a aussi utilisé 'join '. Mais oui, une chose que j'ai oubliée. L'utilisateur a utilisé 'append' et' comprehension de liste 'a un léger avantage là. Donc ça marche. +1 –

1

Une autre façon pythonique et simple, en Python 3, pourrait utiliser map, dit un autre SO discussion, il devrait être plus rapide, il irait comme ceci:

original_list = [['the', 'cat', 'in', 'the', 'hat'], ['fat', 'cat', 'sat', 'on', 'the', 'mat']] 

#    (------where magic happens--------) 
desired_list = list(map(' '.join, original_list)) 

#print 
#output ['the cat in the hat', 'fat cat sat on the mat']