我正在修改一些代码,这些代码在通过列表解析声明的列表上调用枚举,例如
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
有人可以解释为什么会这样吗?
答案 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