为了账号安全,请及时绑定邮箱和手机立即绑定

循环以在不同的子列表中拆分列表

循环以在不同的子列表中拆分列表

烙印99 2021-03-16 17:23:31
我想拆分一个数字列表,将序列的第一个数字与下一个数字进行比较,以找出数字是否更大,在这种情况下,我们创建该子列表,直到找到一个较小的数字。和彼此Inputdata = [45,42,78,120,47,2,50,32,34]比较45和42更大不是,所以仅用45创建列表,然后从42开始与下一个比较,直到找到小于42的列表:Output = [45] [42,78,120,47] [2,50,32,34]这是我的代码:data = [45,42,78,120,47,2,50,32,34]m = (len(data))i=0list1=[]emptylist = Truewhile i <= m: for j in range(i+1,len(data)-1):    if data[i] < data[j]:        list1.append(data[j])        emptylist = False    else:        if emptylist:            list1.insert(0,data[i])            print list1            i += j            list1 = []            emptylist = True            break        else:            list1.insert(0,data[i])            print list1            print j            i += j            print i            list1 = []            emptylist = True            i += j            break我的输出是:[45][42, 78, 120, 47]我找不到问题...有什么建议吗?谢谢PD1。这个想法是创建子列表,其中第一个元素是较小的元素。
查看完整描述

2 回答

?
一只甜甜圈

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()一次。


查看完整回答
反对 回复 2021-03-31
  • 2 回答
  • 0 关注
  • 130 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信