【发布时间】:2019-01-08 07:48:11
【问题描述】:
我正在制作一个完成以下内容的程序:
当输入一个列表a时,如果结果是非负数,它将减去连续的元素(从头开始)。
例如,如果
a=[3,2,1]
然后连续的数字将被减去,所以a=[1,1],然后是a=[0]。此外,在结果中,所有数字都必须升序(例如,2,1 不能在列表中)。另一个例子:
a=[1, 10, 7, 3, 2]
[1, 3, 3, 2] #10-7 (10 and 7 get replaced with 3)
[1, 0, 2] #3-3 (precedence goes to the left: 3-3 gets subtracted, not 3-2)
[1, 2] #1-0
这是我当前的代码(其中 a 是随机生成的):
import random
a=[random.randint(1,10) for e in range(20)]
print(a)
loop=1
while True:
try:
#print(loop,a)
subloop=0
while subloop<loop:
if a[loop-subloop]<=a[loop-1-subloop]:
a[loop-1-subloop]=a[loop-1-subloop]-a.pop(loop-subloop)
if loop!=1:
loop-=1
subloop+=1
if a[loop]<=a[loop-1]:
a[loop-1]=a[loop-1]-a.pop(loop)
else:
loop+=1
except IndexError:
break
print(a)
这段代码感觉有点长/效率低。有没有更好或更短/更有效的方法来做到这一点?
【问题讨论】:
-
第一个示例不应该以
[0]结尾吗?[3, 2, 1]->[1, 1]->[0] -
是的。很抱歉
-
在你的例子中,你为什么不做
10-7和3-2?每次迭代只有一个减法吗? -
即使你这样做了,它是否仍然以
[1,2]结束。我不确定它是否会有所作为
标签: python list performance loops subtraction