【问题标题】:Reversing order in incrementing digits以递增数字反转顺序
【发布时间】:2019-05-29 09:59:56
【问题描述】:

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

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

这是我目前的尝试:

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]     

【问题讨论】:

  • 您的解决方案如何?
  • 请包含包含在 for 循环中的相当长的解决方案,因为它对我们这些可能试图解决您的问题的人有所帮助。目前尚不清楚您的数字是如何分块的,因为中间的数字似乎没有任何确定的顺序。
  • 好的,我将包括我当前的解决方案。抱歉,我对 SO 很陌生
  • 别担心,我不想在我之前的评论中听起来很刺耳。包含 1) 您尝试过的代码、2) 任何输入数据(在您的情况下列表就足够了)、3) 预期输出(您已包含在内)始终只是最佳实践。要使这个问题成为 SO 的好问题,您所缺少的只是您使用的代码。
  • 包括我迄今为止的尝试

标签: python list numpy sorting


【解决方案1】:

试试这个:

(来自@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)

【讨论】:

    【解决方案2】:

    带有理解列表:

    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]
    

    【讨论】:

      猜你喜欢
      • 2019-05-07
      • 1970-01-01
      • 1970-01-01
      • 2013-12-25
      • 2019-06-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多