2 回答
![?](http://img1.sycdn.imooc.com/56fb3e3d0001a10301000100-100-100.jpg)
TA贡献1836条经验 获得超5个赞
L = [45, 42, 78, 120, 47, 2, 50, 32, 34]
cond = L[0]
res = [[cond]]
for item in L[1:]:
if item > cond:
res[-1].append(item)
else:
cond = item
res.append([cond])
现在res是:
[[45], [42, 78, 120, 47], [2, 50, 32, 34]]
细节:
索引0为您提供了第一个元素:
>>> cond = L[0]
>> cond
45
我们创建res将保存结果的新列表,然后将45,即第一个元素放入列表,该列表又成为以下内容的第一个元素res:
>>> res = [[cond]]
>>> res
[[45]]
现在,我们从第二个元素开始遍历列表。L[1:]给出此子列表:
>>> L[1:]
[42, 78, 120, 47, 2, 50, 32, 34]
注意,res[-1]始终为我们提供列表的当前最后一个元素。此本身必须是列表,item如果大于我们的数字,我们会附加下一个数字()cond。否则,我们将在仅包含一个element的情况下追加一个新的子列表res.append([cond])。在下一轮中,我们将执行相同的操作。因此,构成我们最后一个元素的列表res将增长到item > cond。如果没有,我们将添加一个新列表cond。冲洗并重复直到原始列表的末尾。
变化
该L[1:]做的一个副本L。这不是最有效的方法。如果我们L 变成一个迭代器,我们可以避免这种情况:
L = iter([45,42,78,120,47,2,50,32,34])
cond = next(L)
res = [[cond]]
for item in L:
if item > cond:
res[-1].append(item)
else:
cond = item
res.append([cond])
每个都next(L)将为我们提供迭代器中的下一项。for循环将遍历其余部分。因此,在我们的案例中,它从第二个元素开始,因为我们调用了next()一次。
添加回答
举报