代码之家  ›  专栏  ›  技术社区  ›  TheJuice

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

  •  1
  • TheJuice  · 技术社区  · 14 年前

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

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

    稍后:

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

    但是,当我通过start参数将enumerate调用更改为从第二个list元素开始时,例如

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

    我得到一个例外:

    exceptions.TypeError: 'Group' object is not iterable
    

    有人能解释一下为什么会这样吗?

    3 回复  |  直到 12 年前
        1
  •  2
  •   Bill the Lizard Alexis MP    12 年前

    问题:在序列上使用带有单个参数的索引器将生成 单一的 序列中的对象。从序列中选取的对象属于类型 Group ,并且该类型不可重复。

    解决方案:使用 slice construct 得到一个新的 序列 特定索引中的项:

    for idx, group in enumerate(self.groups[1:]):
        # do some stuff
    
        2
  •  1
  •   SilentGhost    14 年前

    你不是 从第二个开始 ,您尝试只在第二个周期内迭代。要从第二项开始,请执行以下操作:

    for idx, group in enumerate(self.groups[1:]):
        # process
    
        3
  •  1
  •   Ruslan Spivak    14 年前

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

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