Как правильно сделать генератор списка?

Друзья, подскажите пожалуйста, как в одну строку записать цикл? Пол дня потратили, ничего не получилось...

results_tokened_list = [['готовы', 'осведомленность', 'готовность', 'новой', 'рабочей', 'силы', 'медицинской', 'проверке', 'одному'], ['внедрение', 'принципа', 'принесли', 'детской'], ['детский', 'диатез', 'превращается', 'пренебрежение', 'злоупотребление', 'думают', 'родители'],['синоним', 'совершенства'], ['библиотека', 'bda', 'открыта'], ['юридическая', 'помощь', 'ваших', 'нужд'], ['шприцы', 'пациентов', 'вич']]

tmp = []
for i in results_tokened_list:
    for j in ngrams(i, n=3):
        tmp.append(' '.join(j))

Ответы (1 шт):

Автор решения: A_Vaclav

Тут обычно (ну по крайней мере у меня) возникает путаница какой for за что отвечает. Поэтому делаем тест:

data = [(i,j) for i in [1, 2, 3] for j in ['a', 'b', 'c']]
print(data)

Вывод:

[(1, 'a'), (1, 'b'), (1, 'c'), (2, 'a'), (2, 'b'), (2, 'c'), (3, 'a'), (3, 'b'), (3, 'c')]

Включаем воображение:

  |      a         b         b
________________________________
1 | (1, 'a'), (1, 'b'), (1, 'c')
2 | (2, 'a'), (2, 'b'), (2, 'c')
3 | (3, 'a'), (3, 'b'), (3, 'c')

Но нам же нужен список списков! Значит меняем первый for на генератор списка:

data = [[(i,j) for i in [1, 2, 3]] for j in ['a', 'b', 'c']]
for line in data:
    print(line)

Вывод:

[(1, 'a'), (2, 'a'), (3, 'a')]
[(1, 'b'), (2, 'b'), (3, 'b')]
[(1, 'c'), (2, 'c'), (3, 'c')]

Получаем не стыковку в картинках... следовательно:

data = [[(j,i) for i in ['a', 'b', 'c']] for j in [1, 2, 3]]
for line in data:
    print(line)

[(1, 'a'), (1, 'b'), (1, 'c')]
[(2, 'a'), (2, 'b'), (2, 'c')]
[(3, 'a'), (3, 'b'), (3, 'c')]
→ Ссылка