1

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

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

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

4

3 回答 3

3

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

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

for idx, group in enumerate(self.groups[1:]):
    # do some stuff
于 2010-03-31T11:08:05.683 回答
1

你不是从第二个开始,你只是试图迭代第二个。要从第二项开始,请执行以下操作:

for idx, group in enumerate(self.groups[1:]):
    # process
于 2010-03-31T11:08:36.930 回答
1

如果您的序列足够大,可以考虑使用模块中的islice函数itertools,因为对于大序列来说,它比切片更节省内存:

import itertools

for idx, group in enumerate(itertools.islice(self.groups, 1, None)):
    # process
于 2010-03-31T16:45:04.280 回答