使用start参数时,Python枚举内置错误

时间:2010-03-31 11:04:17

标签: python iterable

我正在修改一些代码,这些代码在通过列表解析声明的列表上调用枚举,例如

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

然后:

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

但当我通过start参数将枚举调用更改为从第二个列表元素开始时,例如

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

我得到一个例外:

exceptions.TypeError: 'Group' object is not iterable

有人可以解释为什么会这样吗?

3 个答案:

答案 0 :(得分:3)

问题:在序列上使用带有单个参数的索引器将从序列中生成单个对象。从序列中挑选的对象是Group类型,并且该类型不可迭代。

解决方案:使用slice construct从特定索引中获取新的序列项目:

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

答案 1 :(得分:1)

你不是从第二个开始,你只是尝试迭代第二个。从第二项开始:

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

答案 2 :(得分:1)

如果您的序列足够大,而不是考虑使用islice模块中的itertools函数,因为它对于大型序列而言比切片更有效:

import itertools

for idx, group in enumerate(itertools.islice(self.groups, 1, None)):
    # process