gpt4 book ai didi

python - 当第一个元素大于下一个元素时减去列表中的连续元素 - Python

转载 作者:行者123 更新时间:2023-11-28 22:17:06 26 4
gpt4 key购买 nike

我正在制作一个程序来完成以下内容:

当输入一个列表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)

这段代码感觉有点长/效率低下。有没有更好或更短/更有效的方法来做到这一点?

最佳答案

这是我的看法:

a = [1, 10, 7, 3, 2]
b = [3, 2, 1]


def index_helper(l):
for i, x in enumerate(l[:-1]):
if l[i] >= l[i+1]:
return i


def reduce(l):
i = index_helper(l)
while i is not None:
l[i:i + 2] = [l[i] - l[i + 1]]
i = index_helper(l)
return l


>>> reduce(a)
[1, 2]

>>> reduce(b)
[0]

关于python - 当第一个元素大于下一个元素时减去列表中的连续元素 - Python,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51621428/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com