Как разделить элементы списка и заменить их на основе пробела? - PullRequest
0 голосов
/ 20 июня 2019

Я пытаюсь разделить имеющиеся у меня элементы list на основе разделителя пробелов и заменить строку, которую я разделяю, новой строкой.

До сих пор я пробовал это, я использовал функцию split для разделения строки, но я не могу добавить элементы разделения (или строку) обратно в мой исходный список. Я попытался использовать join для элементов списка, но это дало мне синтаксическую ошибку.

Вот что я попробовал:

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

for item in my_list:
    if ' ' in item:
        print(True)
        my_list.append(i)
        print(i)
    else:
        print(False)

print(my_list)

Но мой код не дает ожидаемого результата. Результирующий list, который я получаю:

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

Но то, что я на самом деле пытаюсь получить, примерно так:

оригинальный список:

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

новый список:

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

Ответы [ 5 ]

3 голосов
/ 20 июня 2019

Использование str.split с chain.from_iterable

Ex

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))) 

Выход:

['my_label2', 'new_label2', 'my_label', 'label_test1', 'label_test2', 'label_test3', 'my_label2', 'new_label2', 'my_label']
2 голосов
/ 20 июня 2019

extend () - используется для объединения двух списков или вставки нескольких элементов в один список.

split () - возвращает список строк после разбиениязаданная строка указанным разделителем.по умолчанию split () принимает пробел в качестве разделителя.

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)

O / P:

['my_label2', 'new_label2', 'my_label', 'label_test1', 'label_test2', 'label_test3', 'my_label2', 'new_label2', 'my_label']
1 голос
/ 20 июня 2019

Попробуйте это,

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

Выход:

>>> [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']
1 голос
/ 20 июня 2019

А как же:

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']

chains из встроенной библиотеки itertools позволяет объединить 2+ итераций в одну.

0 голосов
/ 20 июня 2019

Этот кусок может дать результат, но это лучший способ сделать это?

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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...