Разделение строк внутри списка списков по пробелам - PullRequest
3 голосов
/ 13 апреля 2020

Предположим, у меня есть следующая структура:

t = [['I will','take','care'],['I know','what','to','do']]

Как вы видите в первом списке, у меня есть 'I will', и я хочу, чтобы они разбились на два элемента 'I' и 'will', st результат:

[['I', 'will', 'take', 'care'], ['I', 'know', 'what', 'to', 'do']]

Быстрый и грязный алгоритм выглядит следующим образом:

train_text_new = []


for sent in t:
  new = []
  for word in sent:
    temp = word.split(' ')
    for item2 in temp:
      new.append(item2)


  train_text_new.append(new)

Но я хотел бы знать, существует ли более читаемый и, возможно, более эффективный алгоритм для решения этой проблемы .

Ответы [ 4 ]

5 голосов
/ 13 апреля 2020

Вы можете сделать простой генератор, который выдает разбиения, а затем использовать его в понимании списка:

t = [['I will','take','care'],['I know','what','to','do']]

def splitWords(l):
    for words in l:
        yield from words.split()

[list(splitWords(sublist)) for sublist in t]
# [['I', 'will', 'take', 'care'], ['I', 'know', 'what', 'you', 'to', 'do']]
2 голосов
/ 13 апреля 2020

присоединение каждого внутреннего списка к строке с использованием usin join и разбиение этой строки с использованием split для получения списка сделают трюк

t = [['I will','take','care'],['I know','what','to','do']]
res = [' '.join(i).split() for i in t]
print(res)
# output [['I', 'will', 'take', 'care'], ['I', 'know', 'what', 'to', 'do']]
2 голосов
/ 13 апреля 2020

Вы можете попробовать это. Предполагая, что расщепление всегда происходит с первым элементом подсписка

t = [['I will','take','care'],['I know','what','to','do']]
[start.split()+rest for start,*rest in t]
# [['I', 'will', 'take', 'care'], ['I', 'know', 'what', 'to', 'do']]

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

[[j for i in lst for j in i.split()]for lst in t]
# [['I', 'will', 'take', 'care'], ['I', 'know', 'what', 'to', 'do']]
1 голос
/ 13 апреля 2020

Вы можете использовать itertools.chain.from_iterable для выравнивания после разделения:

from itertools import chain

t = [['I will','take','care'],['I know','what','to','do']]

print([list(chain.from_iterable(x.split() for x in y)) for y in t])

Вывод:

[['I', 'will', 'take', 'care'], ['I', 'know', 'what', 'to', 'do']]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...