Вам нужно проверить свои границы самостоятельно - кроме того, что вы получите еще одну ошибку, которая может произойти, если вы объедините [0,1,2,3]
и [0,4,8]
:
while (0 или 0):
- это ложь , и ваша функция не будет работать в это время l oop.
Исправления с комментариями:
def merge(a1,a2):
if len(a1)<1:
return a2
if len(a2)<1:
return a1
i=0
j=0
# store result once - micro-optimization
la1 = len(a1)
la2 = len(a2)
m=[] # do not call variables the same as the function, in case you want to recurse
# I removed the variables to hold the current values in favor
# of directly indexing them
while True: # beware of (0 or 0) which is falsy
print(a1[i],a2[j],end=" -> ")
if a1[i] <= a2[j]: # one more "true" value in first if branch
m.append(a1[i]) # if both are same, we take from the 1st list
i+=1 # no need to branch into the else part
else:
m.append(a2[j])
j+=1
print(m)
# stop conditions: if one list is done, add the other to the end of m
if i == la1:
m.extend(a2[j:])
break
if j == la2:
m.extend(a1[i:])
break
return m
print("----",merge([1,6,9],[0,7,8,11]))
Вывод:
1 0 -> [0]
1 7 -> [0, 1]
6 7 -> [0, 1, 6]
9 7 -> [0, 1, 6, 7]
9 8 -> [0, 1, 6, 7, 8]
9 11 -> [0, 1, 6, 7, 8, 9]
---- [0, 1, 6, 7, 8, 9, 11]
Вы можете узнать больше о нарезке списка здесь: Понимание обозначения среза