对于数组中的每个元素,如果该元素小于其先前的元素,则将其增加直至以前的元素



假设我有一个数组:list1 = [8、5、3、1、1、10、15、9]现在,如果该元素小于先前的元素,请将其增加直至以前的元素。

在这里:

5<8因此应该变成:5 3 1 = 9,即(8 1)

3<5因此3应该变成:3 2 1 = 6即(5 1)

1<3所以1应该成为:1 2 1 = 4,即(3 1)

现在,如果元素小于以前的元素,我可以获得差异。但是,如何在最终列表中使用它以获取这样的输出:

finallist = [8,9,6,4,1,10,15,16]

还如何在代码中获得" k"列表的最终列表值?现在显示:

[2] [2,4] [2,4,3] [2,4,3,3] [2,4,3,3,7]

源代码:

list1 = [8, 5, 3, 1, 1, 10, 15, 9]
k = []
def comput(x):
    if i[x] < i[x-1]:
        num = (i[x-1] - i[x]) + 1
        k.append(num)
        print(k)
    return

for i in [list1]:
    for j in range(len(list1)):
        comput(j)

您可以为此使用列表理解。基本上,以下代码将检查一个代码是否大于下一个代码。如果是,则将其转换为上一个 1。

list1 = [8, 5, 3, 1, 1, 10, 15, 9]
k = [list1[0]] + [i if j<=i else j+1 for i,j in zip(list1[1:],list1[:-1])]
cost = [j-i for i,j in zip(list1,k)]
print(k)
print(cost)

输出:

[8, 9, 6, 4, 1, 10, 15, 16]
[0, 4, 3, 3, 0, 0, 0, 7]

以下代码将创建一个带有所需输出的新列表

l1 = [8, 5, 3, 1, 1, 10, 15, 9]
l = [l1[0]]
c=[0]         # cost / difference list
for i in range(len(l1)-1):
    if l1[i+1] < l1[i]:
        l.append(l1[i]+1)
        c.append(l1[i]+1-l1[i+1])
    else:
        l.append(l1[i+1])
        c.append(0)
print(l)

输出

[8, 9, 6, 4, 1, 10, 15, 16]
[0, 4, 3, 3, 0,  0,  0,  7]

最新更新