以递增数字的方式反转顺序



我有一个数字列表,我正在尝试以尽可能高效的方式执行以下操作。

对于列表中的每个连续递增的块,我必须颠倒其顺序。

这是我到目前为止的尝试:

l = []
l_ = []
i = 0
while i <= len(a)-1:
    if a[i] < a[i+1]:
        l_= l_ + [a[i]]
    else:
        l = l_ + [a[i]]
        l_ = []
    i = i + 1

我将不胜感激任何指导或其他方法。

因此,对于以下列表:

a = [1,5,7,3,2,5,4,45,1,5,10,12]

我想获得:

[7,5,1,3,5,2,45,4,12,10,5,1]     

试试这个:

(来自@Scott波士顿和@myrmica的修复)

nums = [1, 3, 5, 4, 6, 8, 9, 7, 2, 4] # sample input
chunk = []    # keep track of chunks
output = []   # output list
for i in nums:
    if chunk and i < chunk[-1]:
        output.extend(chunk[::-1]) # add reversed chunk to output
        chunk[:] = [i]       # clear chunk
    else:
        chunk.append(i)      # add to chunk
output.extend(chunk[::-1])   # empty leftover chunk
print(output)

带有理解列表:

a = [1,5,7,3,2,5,4,45,1,5,10,12]
split=[0]+[i for i in range(1,len(a)) if a[i-1]>a[i]]+[len(a)]
#[0, 3, 4, 6, 8, 12]
chunks=[list(reversed(a[i:j])) for i,j in zip(split[:-1],split[1:])]
#[[7, 5, 1], [3], [5, 2], [45, 4], [12, 10, 5, 1]]
print(sum(chunks,[]))   
#[7, 5, 1, 3, 5, 2, 45, 4, 12, 10, 5, 1]

最新更新