【问题标题】:Python: slices of enumeratePython:枚举切片
【发布时间】:2014-06-03 06:23:23
【问题描述】:

我想在列表的一部分内进行迭代。 另外,我想知道我迭代下的元素的索引。

我想做类似的东西

for i, elm in enumerate(test_list)[7:40]:
    print i, elm
    #i must start with 7

唉,它说'enumerate' object has no attribute '__getitem__'

我怎样才能以最 Python 的方式获得它?

【问题讨论】:

    标签: python list slice


    【解决方案1】:

    你可以使用islice:

    from itertools import islice
    
    for i,elm in islice(enumerate(some_list),7,40):
        print i,elm
    

    【讨论】:

    • 我认为这是最好的答案,因为它不需要输入两次切片的起始位置。
    • 但是,它确实消耗了列表的第一个元素,因此如果您从索引 100 开始,它将首先迭代 100 个元素。切片列表只会跳转那里。
    • @poke 确实,但是切片也会在内存中创建一个临时列表。两者都有其性能优势。
    • @roippi,但由于enumerate() 是一个迭代器,影响不是更显着吗?
    • @wnnmaw 很难回答,在某些情况下两者都更快。几乎永远不会接近性能瓶颈,因此真正根据其性能特征选择一个是过早的优化。
    【解决方案2】:

    enumerate 返回一个迭代器,它不支持基于索引的访问。但是,您可以先对原始列表进行切片,然后使用 enumerate 从不同的索引开始:

    for i, elm in enumerate(test_list[7:40], 7):
        print i, elm
    

    【讨论】:

      猜你喜欢
      • 2021-04-18
      • 1970-01-01
      • 2015-08-08
      • 2015-12-17
      • 1970-01-01
      • 2020-08-09
      • 2011-10-28
      • 1970-01-01
      • 2020-09-30
      相关资源
      最近更新 更多