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 个位置。谁能帮我解决这个问题?
您可以从头到尾迭代列表,并跟踪从值中收集的总和。当您有一个非零和时,从中取 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)