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(,解决方案/代码似乎太混乱了。

有人知道一个优雅的解决方案吗?

按零分组并反转每个组。

>>> [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]

不太确定它的优雅/效率,但以下是您的解决方案:

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 = []
reverse_list = []
for i in list_a:
if i == 0:
if reverse_list:
list_b += reverse_list[::-1]
reverse_list.clear()
list_b.append(i)
else:
reverse_list.append(i)
# If list ended without encountering zero
list_b += reverse_list[::-1]
print(list_a)
print(list_b)

输出为:

[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]
[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]

相关内容

  • 没有找到相关文章

最新更新