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

标签 python list performance loops subtraction

我正在编写一个程序来完成以下任务:

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

相关文章:

c++ - 为什么我不能将 boost::function 存储在 std::list 中?

python - 使用另一个列表查找配对元素列表中的元素 (Python)

c++ - 类不存在默认构造函数但未默认传递

python - 有效计算 Python 正则表达式匹配

performance - Redis 最大内存策略 : performances of volatile-lru vs allkeys-lru

Javascript,如何将Blockly生成的Python代码保存到.py文件?

python 路易吉: requires() can not return Target objects

java - 在 mapToInt 之后调用 map 有什么好处吗?

python - 如何根据当前日期创建文件结构?

python - 使用 Bottle 的自定义插件将日期时间作为 JSON 返回?