Задать вопрос
@adiska21

Как цикл for влияет на формирования списка?

написал простецкий код по "Марковым цепям"

import numpy as np

text = open("che-1.txt", encoding="utf8").read()
corpus = text.split()


def pair(corpus):
    for i in range(len(corpus) - 1):
        yield corpus[i], corpus[i+1]


pairs = pair(corpus=corpus)
print([i for i in pairs])

#___________________________________________________________

word_dict = {}

for word1, word2 in pairs:
    if word1 in word_dict.keys():
        word_dict[word1].append(word2)
    else:
        word_dict[word1] = [word2]


#___________________________________________________________

first_word = np.random.choice(corpus)

while first_word.islower():
    first_word = np.random.choice(corpus)

#___________________________________________________________

chain = [first_word]

n_words = 100

for i in range(n_words):
    chain.append(np.random.choice(word_dict[chain[-1]]))

print(" ".join(chain))


Так вот строка 13 - print([i for i in pairs]) - странно влияет на код, ибо если ее вырезать, то код будет работать исправно. Если же ее оставить, то будет KeyError на строке 40
  • Вопрос задан
  • 125 просмотров
Подписаться 1 Простой Комментировать
Решения вопроса 1
sergey-gornostaev
@sergey-gornostaev Куратор тега Python
Седой и строгий
Дело не в цикле for. Функция pair возвращает генератор, а генератор можно обойти только один раз.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы