【问题标题】:Iterating over pairs of items in a list shifting according to a step and increment the step at each iteration (in python)迭代列表中的项目对,根据一个步骤移动并在每次迭代时增加步骤(在python中)
【发布时间】:2020-12-28 13:14:53
【问题描述】:

*大家好,

我正在寻找一些指导。对于 n 个整数项的列表,我想按顺序迭代它的对,并为每次迭代增加它们之间的步长/间隙。

为了更清楚,避免歧义,列表 [3,6,7,2,4,9]

第一次迭代比较 (3,6),(6,7),(7,2),(2,4),(4,9)
第二次迭代比较 (3,7),(6,2),(7,4),(2,9)
第三次迭代比较 (3,2),(6,4),(7,9)…等等。

我正在努力想出一个解决方案来维护列表中的开始元素,但以二、三等步骤进行比较。进行第一次迭代的代码如下(我本可以使用 zip 函数),但我被困在下一个阶段,即如何在下一次迭代中将步长增加 2 和 3。我想知道有没有办法打破while循环并修改变量步骤? (我已经尝试过,但 python 显然在抱怨,因为我在一个范围内操作)。

def pairs_func(l):
    i = 0
    step = 1
    while step < len(l):
        print(l[i])
        print(l[step])
        i = i + 1
        step = step + 1

提前致谢。 F

【问题讨论】:

    标签: python list iteration


    【解决方案1】:

    您可以修改著名的pairwise() iterator 以具有gap 参数:

    from itertools import tee
    
    def pairwise(iterable, gap=1):
        "s -> (s0,s{gap}), (s1,s{gap+1}), (s2, s{gap+2}), ..."
        a, b = tee(iterable)
        for i in range(gap):
            next(b, None)
        return zip(a, b)
    

    用法:

    >>> a = [3, 6, 7, 2, 4, 9]
    
    >>> list(pairwise(a))
    [(3, 6), (6, 7), (7, 2), (2, 4), (4, 9)]
    
    >>> list(pairwise(a, 2))
    [(3, 7), (6, 2), (7, 4), (2, 9)]
    
    

    或者,如果您更喜欢在循环中使用它:

    for gap in range(1, len(a)):
        for x, y in pairwise(a, gap):
            print(f'work with x={x} and y={y}')
    
    # output:
    work with x=3 and y=6
    work with x=6 and y=7
    work with x=7 and y=2
    work with x=2 and y=4
    work with x=4 and y=9
    work with x=3 and y=7
    work with x=6 and y=2
    work with x=7 and y=4
    work with x=2 and y=9
    work with x=3 and y=2
    work with x=6 and y=4
    work with x=7 and y=9
    work with x=3 and y=4
    work with x=6 and y=9
    work with x=3 and y=9
    

    【讨论】:

    • 谢谢皮埃尔,我试试看
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-08-03
    • 2022-01-05
    • 2017-08-30
    • 1970-01-01
    • 2018-01-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多