Python 递归表达式中的实现错误

implementation error in Python recursive expression

我正在解决问题。 你要离开最后一个列表,但是之前的列表又被打印出来了。

def merge(xs,ys):
  # xs, ys, ss = xs, ys, []
  xs, ys, ss = xs[:], ys[:], []
  while xs!=[] and ys!=[]:
    if xs[0] <= ys[0]:
      ss.append(xs[0])
      xs.remove(xs[0])
    else:
      ss.append(ys[0])
      ys.remove(ys[0])  
  ss.extend(xs)
  ss.extend(ys)
  return ss

accumulator = []
remain = []

def merge2R(xss):

    if len(xss)% 2 != 0 :
     OExcept = len(xss)-1 
     remain.append((xss[OExcept]))
     xss.remove(xss[OExcept])   
     

   
    if xss !=  []:           
     accumulator.append(merge(xss[0],xss[1]))
     xss.remove(xss[0])
     xss.remove(xss[0])   
     return merge2R(xss)

    else: 
     return accumulator + remain

结果是这样的。 我该如何解决?

>>> merge2R([[2],[1,3],[4,6,7],[5,8],[9]])
[[1, 2, 3], [4, 5, 6, 7, 8], [1, 2, 3], [4, 5, 6, 7, 8], [9]]

期望的结果值:

>>> merge2R([[2],[1,3],[4,6,7],[5,8]])
[[1,2,3], [4,5,6,7,8]]
>>> merge2R([[2],[1,3],[4,6,7],[5,8],[9]])
[[1,2,3], [4,5,6,7,8], [9]]

您的代码运行正常,您只需重置 accumulatorremain

def merge2R(xss):
    # Declare use of globals
    global remain
    global accumulator

    if len(xss) % 2 != 0:
        OExcept = len(xss)-1
        remain.append((xss[OExcept]))
        xss.remove(xss[OExcept])

    if xss != []:
        accumulator.append(merge(xss[0], xss[1]))
        xss.remove(xss[0])
        xss.remove(xss[0])
        return merge2R(xss)

    else:
        x = accumulator + remain
        # Must reset accumulator and remain
        accumulator = []
        remain = []
        return x

因为您将两个数组都初始化为空,然后附加到它们:

# Remain
remain.append((xss[OExcept])) 
# Accumulator
accumulator.append(merge(xss[0], xss[1]))

处理完这些数组中的数据后(在函数末尾),您需要丢弃它:

accumulator = []
remain = []

多次调用相同参数的函数时,不丢弃这些数组的结果很明显:

print(merge2R([[2], [1, 3]]))
print(merge2R([[2], [1, 3]]))
print(merge2R([[2], [1, 3]]))
print(merge2R([[2], [1, 3]]))
print(merge2R([[2], [1, 3]]))
[[1, 2, 3]]
[[1, 2, 3], [1, 2, 3]]
[[1, 2, 3], [1, 2, 3], [1, 2, 3]]
[[1, 2, 3], [1, 2, 3], [1, 2, 3], [1, 2, 3]]
[[1, 2, 3], [1, 2, 3], [1, 2, 3], [1, 2, 3], [1, 2, 3]]