对于数组中的每个元素,如果元素小于其前一个元素,则将其增加到前一个元素为1

时间:2017-11-22 08:51:59

标签: arrays python-3.x sorting

假设我有一个数组:list1 = [8,5,3,1,1,10,15,9] 现在,如果元素小于其前一个元素,则将其增加到前一个元素。

这里:

  

5< 8应该变为:5 + 3 + 1 = 9,即(8 + 1)

     

3< 5应该变成3:2 + 1 = 6,即(5 + 1)

     

1<因此,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)

2 个答案:

答案 0 :(得分:1)

您可以使用列表推导。基本上,以下代码将检查一个是否大于下一个。如果是,则将其转换为前一个+ 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]

答案 1 :(得分:0)

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

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]