You need to check your bounds yourself - beside that you got another error bound to happen if you merge [0,1,2,3]
and [0,4,8]
:
while(0 or 0):
is falsy and your function will not enter the while loop.
Fixes with comments:
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]))
Output:
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]
You can read more about list slicing here: Understanding slice notation