Вложенный цикл над списком и динамически создавать переменные

У меня есть список предложений, и я хочу выполнить какое-то действие над двумя предложениями каждый раз, но не для всех предложений.

например:

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,

Другие вопросы по тегам