Python перечисляет встроенную ошибку при использовании параметра запуска - PullRequest
1 голос
/ 31 марта 2010

Я изменяю некоторый код, который вызывает перечисление в списке, объявленном через понимание списка, например.

self.groups = [Groups(self, idx) for idx in range(n_groups)]

затем позже:

for idx, group in enumerate(self.groups):
    # do some stuff

но когда я изменяю вызов перечисления, чтобы начать со 2-го элемента списка через параметр запуска, например,

for idx, group in enumerate(self.groups[1]):

Я получаю исключение:

exceptions.TypeError: 'Group' object is not iterable

Может ли кто-нибудь объяснить, почему это так?

Ответы [ 3 ]

3 голосов
/ 31 марта 2010

Проблема: использование индексатора с одним аргументом в последовательности приведет к получению одного объекта из последовательности. Объект, выбранный из вашей последовательности, имеет тип Group, и этот тип не может быть повторен.

Решение: используйте конструкцию среза , чтобы получить новую последовательность элементов из определенного индекса:

for idx, group in enumerate(self.groups[1:]):
    # do some stuff
1 голос
/ 31 марта 2010

Если ваша последовательность достаточно велика, чем рассмотреть возможность использования функции islice из модуля itertools, потому что она более эффективна для памяти для больших последовательностей, чем нарезка:

import itertools

for idx, group in enumerate(itertools.islice(self.groups, 1, None)):
    # process
1 голос
/ 31 марта 2010

вы не , начиная со второго , вы пытаетесь выполнить итерацию только за секунду. Чтобы начать со второго пункта, выполните:

for idx, group in enumerate(self.groups[1:]):
    # process
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...