Я хочу эффективный способ разбить список строк, используя список слов в качестве разделителей. В результате получается еще один список строк.
Я пробовал несколько .split
в одной строке, что не работает, потому что первый .split
возвращает список, а последующие .split
требуют строку.
Вот входные данные:
words = ["hello my name is jolloopp", "my jolloopp name is hello"]
splitters = ['my', 'is']
Я хочу, чтобы вывод был
final_list = ["hello ", " name ", " jolloopp", " jolloopp name ", " hello"]
Обратите внимание на пробелы.
Также возможно иметь что-то вроде
draft_list = [["hello ", " name ", " jolloopp"], [" jolloopp name ", " hello"]]
, который можно сплющить, используя что-то вроде numpy reshape(-1,1)
, чтобы получить final_list
, но идеальный случай -
ideal_list = ["hello", "name", "jolloopp", "jolloopp name", "hello"]
где пробелы были удалены, что аналогично использованию .strip()
.
РЕДАКТИРОВАТЬ 1:
Использование re.split
не работает полностью, если разделители слов являются частью других слов.
words = ["hellois my name is myjolloopp", "my isjolloopp name is myhello"]
splitters = ['my', 'is']
тогда вывод будет
['hello', '', 'name', '', 'jolloopp', '', 'jolloopp name', '', 'hello']
когда это должно быть
['hellois', 'name', 'myjolloopp', 'isjolloopp name', 'myhello']
Это известная проблема с решениями, использующими re.split
.
РЕДАКТИРОВАТЬ 2:
[x.strip() for x in re.split(' | '.join(splitters), ''.join(words))]
не работает должным образом при вводе
words = ["hello world", "hello my name is jolloopp", "my jolloopp name is hello"]
Выход становится
['hello worldhello', 'name', 'jolloopp', 'jolloopp name', 'hello']
когда вывод должен быть
['hello world', 'hello', 'name', 'jolloopp', 'jolloopp name', 'hello']