1
votes

Comment puis-je diviser les éléments de la liste et les remplacer en fonction d'un séparateur d'espace?

J'essaie de diviser les éléments d'une liste que j'ai, basée sur un séparateur d'espace et de remplacer la chaîne que je divise par la chaîne nouvellement divisée.

Jusqu'à présent, j'ai essayé ceci, j'ai utilisé la fonction split pour diviser la chaîne, mais je ne peux pas ajouter les éléments (ou la chaîne) séparés à ma liste d'origine. J'ai essayé d'utiliser join sur les éléments de la liste, mais cela m'a donné une erreur de syntaxe.

Voici ce que j'ai essayé jusqu'à présent:

['my_label2', 'new_label2',  'my_label', 'label_test1', 'label_test2, 'label_test3', 'my_label2', 'new_label2', 'my_label']


1 commentaires

Vous ne devez jamais muter ou modifier une liste en la parcourant en boucle. Créez toujours une nouvelle liste et laissez l'ancienne liste telle quelle.


5 Réponses :


1
votes

Qu'en est-il des:

import itertools

my_list = ['my_label2 new_label2 my_label', 'label_test1 label_test2 label_test3', 'my_label2 new_label2 my_label']

new_list = itertools.chain(*[l.split() for l in my_list])
print(list(new_list))  # >> ['my_label2', 'new_label2', 'my_label', 'label_test1', 'label_test2', 'label_test3', 'my_label2', 'new_label2', 'my_label']

chaînes , à partir de itertools bibliothèque intégrée, vous permet d'enchaîner plus de 2 itérables en un seul.


0 commentaires

3
votes

Utilisation de str.split avec chain.from_iterable

['my_label2', 'new_label2', 'my_label', 'label_test1', 'label_test2', 'label_test3', 'my_label2', 'new_label2', 'my_label']

Sortie:

from itertools import chain
my_list = ['my_label2 new_label2 my_label', 'label_test1 label_test2 label_test3', 'my_label2 new_label2 my_label']
print(list(chain.from_iterable(i.split() for i in my_list))) 


0 commentaires

1
votes

Essayez ceci,

>>> [j for i in my_list for j in i.split()]

['my_label2', 'new_label2', 'my_label', 'label_test1', 'label_test2', 'label_test3', 'my_label2', 'new_label2', 'my_label']

Sortie:

>>> my_list = ['my_label2 new_label2 my_label', 'label_test1 label_test2 label_test3', 'my_label2 new_label2 my_label']


3 commentaires

cela fonctionne dans l'invite de commande pour moi, mais pas dans mon script python.


la sortie est la même liste passée


@PDoe Avez-vous copié et collé le code? Au lieu de j si vous utilisez i , alors seulement vous obtiendrez la même liste.



2
votes

extend () - est utilisé pour fusionner deux listes ou insérer plusieurs éléments dans une liste.

split () a > - renvoie une liste de chaînes après avoir cassé la chaîne donnée par le séparateur spécifié. par défaut, split () prend les espaces comme délimiteur.

['my_label2', 'new_label2', 'my_label', 'label_test1', 'label_test2', 'label_test3', 'my_label2', 'new_label2', 'my_label']

O / P:

my_list = ['my_label2 new_label2 my_label', 'label_test1 label_test2 label_test3', 'my_label2 new_label2 my_label']
new_list=[]
for elm in my_list:
    new_list.extend(elm.split(" "))

print(new_list)


0 commentaires

1
votes

Cette pièce peut donner le résultat mais c'est la meilleure façon de le faire?

my_list = ['my_label2 new_label2 my_label', 'label_test1 label_test2 label_test3', 'my_label2 new_label2 my_label']
new_list = []
for item in my_list:
    new_list.extend(item.split())
my_list.clear()
my_list.extend(new_list)
print(my_list)


0 commentaires