Bezdepbonusu7Программирование: статьи и ответы

Вопрос

Python "TypeError": объект "Генератор" не подлежит подписке

Автор вопроса: RopstahОтветов: 1

Я пытаюсь выполнить простой пример Евклида в Python, но получаю сообщение об ошибке, упомянутое в заголовке. Код выглядит следующим образом:

def gcd1(a,b):
        """ the euclidean algorithm """
        while a:
                a, b = b%a, a
        return b

Я вызываю код следующим образом (я думаю, это может иметь какое-то отношение к этому):

for x in set1:
    print(gcd1(x, set2[x]))

Изменить: текущая ситуация (работает)


set1 = list(range(start, end))
""" otherrange() behaves just like range() however returns a fixed list"""
set2 = list(otherrange(start, end))

for x in set1:
    print(gcd1(x, set2[x]))
  • Можете ли вы сказать нам, в какой строке была ошибка и что такое set2? tdelaney 07.09.2014
  • Что здесь otherrange()? Martijn Pieters 07.09.2014
  • просто диапазон с другими параметрами Ropstah 07.09.2014
  • @Ropstah: range() в Python не является генератором, но ваша проблема указывает на то, что у вас есть такой объект. Пожалуйста, дайте нам что-нибудь, что позволит нам воспроизвести проблему. Только тогда мы сможем дать вам оптимальное решение, а не просто нанести list() штукатурку. Martijn Pieters 07.09.2014
  • @MartijnPieters: otherrange - это настраиваемый метод, который в основном возвращает список чисел. В то время как остальная часть моей реализации могла бы значительно выиграть от оптимизации, на мой вопрос здесь дан ответ. Я хотел бы продолжить и поговорить о проблеме. Ropstah 07.09.2014
  • @Ropstah: Тогда * покажите нам определение otherrange, потому что оно, кажется, возвращает генератор, где вам может не понадобиться возвращать его вообще. Martijn Pieters 08.09.2014

pythoneuclidean-distance

Ответы

Ответ 1 · рейтинг 7 · randomusername

Это означает, что set2 является генератором, чтобы обойти это, просто превратите его в список.

set2_list = list(set2)
for x in set1:
    print(gcd1(x, set2_list[x]))

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы