python - 在 python 中重构生成器的第一次迭代

标签 python loops refactoring

我想知道是否有办法重构以下代码

 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]

最佳答案

循环的要点似乎是对可迭代对象的成对连续元素执行一些操作。所以我会查看函数 pairwise,其定义在 itertools module documentation 中给出。 :

def pairwise(iterable):
    "s -> (s0,s1), (s1,s2), (s2, s3), ..."
    a, b = tee(iterable)
    next(b, None)
    return izip(a, b)

请注意,这不是一个实际的 itertools 函数,您必须将实现复制并粘贴到您的代码中。不管怎样,有了这个函数,你的循环可以像这样实现:

for a, b in pairwise(gen):
    func(b[1], a[1])
    func(b[1], a[2])

关于python - 在 python 中重构生成器的第一次迭代,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13134627/

相关文章:

python - 在 ADMIN_MENU_ORDER 中创建自定义项目

javascript - Javascript 解析器出现索引错误

Python:如何转储 mechanize.Browser 实例的 cookie?

java - 在 Java 中使用循环优化 if 语句

loops - 如何在批处理文件中连续循环命令

c - 使用循环在数组中生成唯一随机数

c++ - 如何更新旧的 C 代码?

python - 使用 Notepad++ 运行 Python

php - 重构的成本是否超过重写的成本?

javascript - CoffeeScript:可以重写得更简洁吗?