我正在编写一个函数 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.
答案 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
时使用。相反,您只需将T
和L1
中两个当前元素中较小的一个添加到L2
。如果两者的大小相同,则只添加一次。每次添加L1
或L2
(或两者)中的元素时,都会增加相应的下标。排除一个列表后,只需将其他项目添加到T
的末尾即可。 (请注意,您不必检查哪个列表已完成;使用空列表扩展T
是无操作。)