首页 > 解决方案 > 使用来自另一个列表的信息生成列表的 Python 问题

问题描述

我想用 python 生成一个基于另一个列表中的信息的列表。以下示例应演示我要传输的信息:

给出了以下列表:

list_a=[0,0,0,0,0,0,0,0,0,1,2,3,4,0,0,0,0,1,2,0,0,0,0,1,2,3,4,5,0,0,0]

然后,我要生成的列表应如下所示:

list_b=[0,0,0,0,0,0,0,0,0,4,3,2,1,0,0,0,0,2,1,0,0,0,0,5,4,3,2,1,0,0,0]

我是这样开始的:

list_b=[]
list_b = [0] * list_a.__len__()         #create a list of nulls
for i in range (list_a.__len__()):
       if list_a(i)!=0:
            if list_a(i+1)=0:
                 list_b.insert(i-(list_a[i]-1),list_a[i])

但是后来我只将第一个元素插入 list_b 并且仍然需要插入所有后续元素(例如插入 4 并且仍然需要插入 3、2、1)并且解决方案/代码似乎太乱了。

任何人都知道一个优雅的解决方案?

标签: pythonlistgenerate

解决方案


按零分组并反转每个组。

>>> [x for _, g in itertools.groupby(list_a, bool) for x in list(g)[::-1]]
[0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 3, 2, 1, 0, 0, 0, 0, 2, 1, 0, 0, 0, 0, 5, 4, 3, 2, 1, 0, 0, 0]

推荐阅读