Because you are swapping the left and right halves of the list, so you only need to work your way through half the list.
Let's take your list [1,2,3,4] and see how this works. The first swap is with i=0 so j = 3. That swaps elements 0 and 3 so the list is now: [4,2,3,1]. OK so far?
One of the reasons people like Python is that it makes lots of things easy. In particular to check if a value is in a list you can just do if x in mylist:
So suppose you are getting all the elements of l1 that are not in l2. The way to do this is:
for i in range(len(l1)):
if not l1[i] in l2:
c.append(l1[i])