使用循环或 stack/queue 按顺序比较列表中的元素

Comparing elements in a list in order using loop or stack/queue

我有一个包含 0 到 100 之间的整数元素的列表 ls。我想构建一个函数来计算多个元素,直到它遇到一个具有更大值的元素,并将计数附加到解决方案列表。

换句话说,如果ls = [5, 10, 1, 1, 20, 1],解应该是[1, 3, 2]:

(如果ls = [7, 3, 9],return应该是[2,1]。)

我使用 for 循环来执行任务:

def compare_and_count(ls):
    answer = []
    num = 1
    ref = 0
    for j in range(1, len(ls)):
        try:
            if ls[ref + j] <= ls[ref]:
                num += 1
            else:
                answer.append(num)
                num = 1
                ref = ref + j
        except IndexError:
            break
    answer.append(num)
    return answer

我试图对两个可移动引用进行值比较,但这会引发 IndexError 并且有时还会忽略最终计数,因此 return 是一个不正确的列表。 (我加了try...except是为了免去IndexError,但是后面的问题还是没有解决)

我假设 loopstack/queue 是解决此问题的最简洁方法,但我还无法找到最佳方法。任何见解表示赞赏。

编辑了答案以更正它。

def my(a):
    count = 1
    maxval = a[0]
    answer = []
    for i in range(1, len(a)):
        if a[i] > maxval:
            maxval = a[i]
            answer.append(count)
            count = 1
        else:
            count += 1
    answer.append(count)
    return answer

I tried to do a value comparison with two movable references

您不需要,只需一个移动索引 i 和一个带有 maxvalcount 计数器来检查条件。