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的循环中重新构造循环