【发布时间】:2015-01-24 21:38:27
【问题描述】:
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)))
输出:
['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')]
是否应该使用更“pythonic”的列表切片语法?
附言
range(slice.start,slice.stop,slice.step)
不能很好地处理某些特殊情况:例如其中stop=-1、start=None 或step=None。如何改进示例范围/切片实现?
【问题讨论】:
-
关于改进工作代码的讨论属于 codereview.stackexchange.com。
标签: python list iteration subclass slice