【问题标题】:Make a list with non-decreasing order elements of a list in Python在Python中使用列表的非递减顺序元素制作列表
【发布时间】:2020-06-02 04:59:43
【问题描述】:

我有一个列表 a = [2,2,1,3,4,1] 。 我想用列表 a 的非递减元素列表创建一个新列表 c。 这意味着我的预期形式是 -

c = [[2,2],[1,3,4],[1]]

这是我的代码:

>>> c = []
>>> for x in a:
...     xx = a[0]
...     if xx > x:
...             b = a[:x]
...             c.append(b)
...             a = a[x:]

但我的输出是:

>>> c
[[2], [2]]

如何制作一个包含列表 a 的所有非递减部分的列表?

【问题讨论】:

    标签: python-3.x list for-loop


    【解决方案1】:

    您可以使用[a[0]] 初始化c 的第一个条目,然后将a 中的当前值附加到c 中当前列表的末尾,如果它>= 前一个值,否则附加包含 c 的值的新列表:

    a = [2,2,1,3,4,1]
    c = [[a[0]]]
    last = a[0]
    for x in a[1:]:
        if x >= last:
            c[-1].append(x)
        else:
            c.append([x])
        last = x
    
    print(c)
    

    输出:

    [[2, 2], [1, 3, 4], [1]]
    

    【讨论】:

      【解决方案2】:

      如果我正确理解您的需求,那么您想要的就是在每次数量减少时拆分列表。如果是这样,那么这应该可以满足您的需要

      c = []
      previous_element = a[0]
      sub_list = [previous_element]
      for element in a[1:]:
          if previous_element > element:
              c.append(sub_list)
              sub_list = []
          previous_element = element
          sub_list.append(previous_element)
      c.append(sub_list)
      

      输出:

      在 [1] 中:c

      输出[2]:[[2, 2], [1, 3, 4], [1]]

      可能有更清晰的方法来纠正上述问题,但对我来说这是前咖啡;)

      还请注意,此代码假定 a 将包含至少一项,如果并非总是如此,那么您将需要在此周围添加一个 if 语句,或者在一段时间内重新构造循环循环

      【讨论】:

        猜你喜欢
        • 2022-06-27
        • 1970-01-01
        • 2020-07-20
        • 2013-11-25
        • 1970-01-01
        • 1970-01-01
        • 2022-01-16
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多