Вложенный цикл над списком и динамически создавать переменные
У меня есть список предложений, и я хочу выполнить какое-то действие над двумя предложениями каждый раз, но не для всех предложений.
например:
list= ["aaaaa","bbbbb","ccccc","ddddd","eeeee"]
similarity_a-d = sim("aaaaa","ddddd")
similarity_a-e = sim("aaaaa","eeeee")
similarity_b-d = sim("bbbbb","ddddd")
similarity_b-e = sim("bbbbb","eeeee")
similarity_c-d = sim("ccccc","ddddd")
similarity_c-e = sim("ccccc","eeeee")
Вот что я попробовал:
similarity={}
for i,vec_lda_topic in enumerate(vec_lda_topics)[:numOfUSs]:
for j,vec_lda_topic in enumerate(vec_lda_topics)[numOfUSs:]:
similarity["sim{0}-{1}".format(i,j)] = gensim.matutils.cossim(vec_lda_topics[i], vec_lda_topics[j])
print('similarity between docs ', i, ' and ',j,': ', similarity["sim{0}-{1}".format(i,j)])
и получите следующую ошибку:
TypeError: 'enumerate' object is not subscriptable
И кроме ошибки, может быть, есть лучший способ сделать это?
2 ответа
Решение
Перечислять нарезанный список, не разрезать перечислимый список (делайте это в обоих местах)
for i,vec_lda_topic in enumerate(vec_lda_topics[:numOfUSs]):
Ваша проблема в том, что вы подписываетесь не в том месте:
similarity={}
for i, vec_lda_topic in enumerate(vec_lda_topics[:numOfUSs]):
for j, vec_lda_topic in enumerate(vec_lda_topics[numOfUSs:]):
simmilarity["sim{0}-{1}".format(i,j)] = gensim.matutils.cossim(vec_lda_topics[i], vec_lda_topics[j])
print('similarity between docs ', i, ' and ', j, ': ', simmilarity["sim{0}-{1}".format(i,j)])
Все, что я сделал, это переместил индекс в вызов enumerate
,