列表上的Iteritems

时间:2014-11-26 14:06:47

标签: python list iteration subclass slice

<{1}}上的

iteritems可能非常有用。

偶尔dict对于列表的一部分很有用,可以(粗略地)实现如下:

iteritems

输出:

import itertools

class List(list):
  def iteritems(self, slice=None):
    if slice is None: return enumerate(self)
    else: return itertools.izip(range(slice.start,slice.stop,slice.step), self[slice])

if __name__ == "__main__":
  l=List("hAnGtEn")
  print l
  print list(l.iteritems())
  print list(l.iteritems(slice(1,7,2)))

是否有更多&#34; pythonic&#34;列表应该使用的切片语法?

P.S。

['h', 'A', 'n', 'G', 't', 'E', 'n']
[(0, 'h'), (1, 'A'), (2, 'n'), (3, 'G'), (4, 't'), (5, 'E'), (6, 'n')]
[(1, 'A'), (3, 'G'), (5, 'E')]

不能很好地处理某些特殊情况:例如其中range(slice.start,slice.stop,slice.step) stop=-1start=None。如何改进示例范围/切片实现?

1 个答案:

答案 0 :(得分:0)

您可以使用iterools.islice

  

创建一个从迭代中返回所选元素的迭代器。如果start为非零,则跳过iterable中的元素,直到达到start。之后,连续返回元素,除非将step设置为高于导致跳过项目的步骤。如果stop为None,则迭代继续,直到迭代器耗尽,如果有的话;否则,它会停在指定的位置。

但是,文档还指出它不支持启动,停止或步骤的负值。