迭代列表并减去值

时间:2013-06-12 20:31:44

标签: python

我有一个数字列表

((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))

1 个答案:

答案 0 :(得分: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)

希望这有帮助