我想用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),解决方案/代码似乎太乱了。
任何人都知道一个优雅的解决方案吗?
提前感谢!
不太清楚它的优雅/效率,但是以下是您的解决方案:
list_b = []
reverse_list = []
reverse = False
for i in list_a:
if i == 0:
if reverse == True:
reverse = False
list_b += reverse_list[::-1]
reverse_list = []
list_b.append(i)
else:
reverse = True
reverse_list.append(i)
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]