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)))
是否有更多" pythonic"列表应该使用的切片语法?
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=-1
或start=None
。如何改进示例范围/切片实现?
答案 0 :(得分:0)
您可以使用iterools.islice
:
创建一个从迭代中返回所选元素的迭代器。如果start为非零,则跳过iterable中的元素,直到达到start。之后,连续返回元素,除非将step设置为高于导致跳过项目的步骤。如果stop为None,则迭代继续,直到迭代器耗尽,如果有的话;否则,它会停在指定的位置。
但是,文档还指出它不支持启动,停止或步骤的负值。