Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/flash/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x 在Python中使用列表的非降序元素创建列表_Python 3.x_List_For Loop - Fatal编程技术网

Python 3.x 在Python中使用列表的非降序元素创建列表

Python 3.x 在Python中使用列表的非降序元素创建列表,python-3.x,list,for-loop,Python 3.x,List,For Loop,我有一个列表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=[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的所有非递减部分创建列表?

您可以使用
[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]]

如果我正确地理解了你想要的,那么你想要的是每次数量减少时分割列表。如果是这样的话,这应该满足你的需要

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)
输出:

[[2, 2], [1, 3, 4], [1]]
在[1]:c中

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

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

还请注意,此代码假定
a
将包含至少一个项,如果情况并非总是如此,则需要围绕此项添加if语句,或者在更while的循环中重新构造循环