0

我有一个数字列表

((100),(99),(97),(96),(3),(2))

如果第二个数字在它之前的数字的 2 以内,我想从该数字中取 2 以及列表中它之后的所有数字,除非最后一个数字变为负数,例如

First iteration, substrate 2 from 97 and lower
((100), (97), (95), (94,),(1),(0))

Second iteration, substrate 2 from 94 and lower
((100), (97), (95), (92), (0),(0))
4

1 回答 1

0

这是使用递归函数shift和辅助函数的答案subtract2

def subtract2(p, i):
    while i < len(p):
        p[i] = p[i] - 2 if p[i] - 2 >= 0 else p[i]
        i += 1

def shift(p, i):
    # base case
    if i >= len(p) - 1:
        return
    elif p[i] - 2 <= p[i+1]:
        subtract2(p, i+1)
    # recurse
    return shift(p, i+1)

希望这可以帮助

于 2013-06-12T21:00:47.377 回答