Как правильно сделать генератор списка?
Друзья, подскажите пожалуйста, как в одну строку записать цикл? Пол дня потратили, ничего не получилось...
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')]