首页 > 解决方案 > 如何在列表右侧添加两个数字

问题描述

我正在尝试创建一个列表并根据长度添加或说合并列表左侧的数字,如果它们相似的话,并且在它们的位置添加一个零。我附在下面的代码。但是当我尝试为右侧做时,就像合并应该发生在右侧,它没有发生。

例如:

[2,0,2,4] -> [4,4,0,0] ---- for left merge
[2,0,2,4] -> [0,0,4,4] ---- for right merge
def try_merge(ol):
    
    temp_list=[]
    final_list=[]
    
    for e in ol:
        if e !=0:
            temp_list.append(e)

    while len(temp_list) < len(ol):
        temp_list.append(0)
        
    count=0
    var=0
    
    if len(temp_list)%2==0:
        temp_list.append(0)
        
    while count <len(temp_list) - 1:
        if temp_list[count]==temp_list[count+1]:
            add = 2 *temp_list[count]
            final_list.append(add)
            count=count+2
        else:
            var=var+1
            final_list.append(temp_list[count])
            count=count+1
    
    if count< len(temp_list):
        final_list.append(temp_list[count])
       
    fcount=len(final_list)
    ocount=len(ol)
    
    while fcount<ocount:
        final_list.append(0)
        fcount=fcount+1
        
    if var==len(ol):
        temp_list.pop()
        return temp_list
    else:
        return final_list

a=[2,2,0,4]
b=try_merge(a)
print(b)

标签: pythonlist

解决方案


您编写的代码基本上说明了将元素添加到列表的末尾,也就是说,它适用于合并左侧。要正确合并,您需要将其更改为相反的内容。我会尽量让代码尽可能接近你的:

def merge_right(ol):
    
    temp_list=[]
    final_list=[]
    
    for e in ol:
        if e !=0:
            temp_list.append(e)

    while len(temp_list) < len(ol):
        temp_list.insert(0,0)
        
    count=0
    var=0
    
    if len(temp_list)%2==0:
        temp_list.insert(0,0)
        
    N = len(temp_list) - 1
    while N-count > 0:
        v = N - count
        if temp_list[v]==temp_list[v-1]:
            add = 2 *temp_list[v]
            final_list.insert(0,add)
            count=count+2
        else:
            var=var+1
            final_list.insert(0,temp_list[v])
            count=count+1
    
    
    if count < len(temp_list):
        final_list.insert(0, temp_list[N-count])
    
    
    fcount=len(final_list)
    ocount=len(ol)
    
    while fcount<ocount:
        final_list.insert(0,0)
        fcount=fcount+1
        

    if var==len(ol):
        temp_list.pop(0)
        return temp_list
    else:
        return final_list


a=[2,2,0,4]
b=merge_right(a)
print(b)
# [0, 0, 4, 4]

推荐阅读