Обратный порядок в возрастающих цифрах - PullRequest
0 голосов
/ 02 января 2019

У меня есть список номеров, и я пытаюсь сделать следующее максимально эффективным образом.

Для каждого последовательно увеличивающегося фрагмента в списке я должен изменить его порядок.

Пока это моя попытка:

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]     

Ответы [ 2 ]

0 голосов
/ 02 января 2019

со списками понимания:

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]
0 голосов
/ 02 января 2019

Попробуйте:

(с исправлениями от @Scott Boston и @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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...