如何将较高的值减少到 1 并从右到左排序

Zeu*_*eer 1 python sorting list

我想制作一个 python 程序,它可以快速减少数组/列表中大于 1 的数字,并将其放在它前面的空白位置。假设我们有:

li = [4,1,0,0,0,1,3,0]   
Run Code Online (Sandbox Code Playgroud)

我们会得到:

rtr = [1,1,0,1,1,1,1,0]
Run Code Online (Sandbox Code Playgroud)

注意 4 是如何变成 1 的,因为它已经在左边了,然后 3 在已经被取走的 1 之前被分成了 2 个位置。谁能帮我解决这个问题?

tri*_*cot 5

您可以从头到尾迭代列表,并跟踪从值中收集的总和。当您有一个非零和时,从中取 1 来填充结果列表,否则在结果列表中放入 0。

这是如何工作的:

def spread(lst):
    carry = 0
    res = []
    for i in reversed(lst):
        carry += i
        res.append(int(carry > 0))
        if carry:
            carry -= 1 
    return list(reversed(res))

lst = [4, 1, 0, 0, 0, 1, 3, 0]
print(spread(lst))  # [1, 1, 0, 1, 1, 1, 1, 0]
Run Code Online (Sandbox Code Playgroud)