合并两个列表错误

时间:2014-04-27 13:15:51

标签: python list while-loop

我正在编写一个函数 merge(L1,L2),它接受两个列表输入并合并它们。但是,当我运行它时,我收到一个错误: TypeError:不支持的操作数类型+:'NoneType'和'str'有人可以帮助我吗?

def merge(L1,L2):
  T = []
  subscript = 0
  while len(L1) > 0 and len(L2) > 0:
      if L1[subscript] < L2[subscript]:
        T.append(str(L1[subscript])) + "," + str(L2[subscript])
      elif L1[subscript] == L2[subscript]:
        del L2[subscript]
        T.append(L1[subscript])
      elif L1[subscript] > L2[subscript]:
        T.append(str(L2[subscript])) + "," + str(L1[subscript])
      subscript += 1
  return T

# print merge([0,2,4,6,8] , [1,3,5,7]) should return [0,1,2,3,4,5,6,7,8]
# I`m assuming that the input lists are sorted.

1 个答案:

答案 0 :(得分:0)

这是一个合适的合并(虽然不是实际编写它的最佳方式,但它符合您的方法):

def merge(L1, L2):
    T = []
    subscript1 = 0
    subscript2 = 0
    while len(L1) > subscript1 and len(L2) > subscript2:
        if L1[subscript1] < L2[subscript2]:
            T.append(L1[subscript1])
            subscript1 += 1
        elif L1[subscript1] == L2[subscript2]:
            T.append(L1[subscript1])
            subscript1 += 1
            subscript2 += 1
        elif L1[subscript1] > L2[subscript2]:
            T.append(L2[subscript2])
            subscript2 += 1
    T.extend(L1[subscript1:])
    T.extend(L2[subscript2:])
    return T

您不能直接向T添加逗号;它们仅在显示T时使用。相反,您只需将TL1中两个当前元素中较小的一个添加到L2。如果两者的大小相同,则只添加一次。每次添加L1L2(或两者)中的元素时,都会增加相应的下标。排除一个列表后,只需将其他项目添加到T的末尾即可。 (请注意,您不必检查哪个列表已完成;使用空列表扩展T是无操作。)