Han*_*Sun 1 python refactoring loops
我想知道是否有办法重构以下代码
first_run = True
for i in gen:
if first_run:
last_head = i[1]
last_tail = i[2]
last_chrom = i[0]
first_run = False
else:
func(i[1], last_head)
func(i[1], last_tail)
last_head = i[1]
last_tail = i[2]
last_chrom = i[0]
Run Code Online (Sandbox Code Playgroud)
循环的基本点似乎是对迭代的连续元素对执行某些操作.所以我会查看模块文档中pairwise给出定义的函数:itertools
def pairwise(iterable):
"s -> (s0,s1), (s1,s2), (s2, s3), ..."
a, b = tee(iterable)
next(b, None)
return izip(a, b)
Run Code Online (Sandbox Code Playgroud)
请注意,这不是实际itertools功能,您必须将实现复制并粘贴到代码中.无论如何,使用此函数,您的循环可以像这样实现:
for a, b in pairwise(gen):
func(b[1], a[1])
func(b[1], a[2])
Run Code Online (Sandbox Code Playgroud)