Q:

'int' object is not iterable on list

Given two lists, both having String elements, write a python program using python lists to create a new string as per the rule given below:
The first element in list1 should be merged with last element in list2, second element in list1 should be merged with second last element in list2 and so on. 
If an element in list1/list2 is None, then the corresponding element in the other list should be kept as it is in the merged list. 
Sample Input:   
list1=['A', 'app','a', 'd', 'ke', 'th', 'doc', 'awa']
list2=['y','tor','e','eps','ay',None,'le','n']  

Expected Output:

“An apple a day keeps the doctor away”

My code:
 for i,j in range(n,len(list1)):
     a = 1
     j = n - a
     s = list[i]+list[j]
     resultant_data.append(s)
     a=+1 
     n+=1

    return resultant_data

#Provide different values for the variables and test your program
list1=['A', 'app','a', 'd', 'ke', 'th', 'doc', 'awa']
list2=['y','tor','e','eps','ay',None,'le','n']
merged_data=merge_list(list1,list2)
print(merged_data)

 Traceback (most recent call last):
  line 21, in <module>
    merged_data=merge_list(list1,list2)
  line 8, in merge_list
    for i,j in range(n,len(list1)):
 TypeError: 'int' object is not iterable

A:

your iterating over 2 indexes, so you need 2 ranges (iterable objects).
something like:
def merge_list(list1, list2):
    resultant_data = []
    list2.reverse()

    for i,j in zip(range(0, len(list1)), range(0, len(list2))):
        if list2[j] is not None:
            s = list1[i]+list2[j]
        else:
            s = list1[i]
        resultant_data.append(str(s))

    return ' '.join(resultant_data)

#Provide different values for the variables and test your program
list1=['A', 'app','a', 'd', 'ke', 'th', 'doc', 'awa']
list2=['y','tor','e','eps','ay',None,'le','n']
merged_data=merge_list(list1,list2)
print(merged_data)

See also https://discuss.codecademy.com/t/loop-two-variables-simultaneously-in-python-3/261808/7
I also removed the computation of the index for list2, if you just reverse the list to begin with, you can just loop over it like you do with list1
There's still some room for improvement, eg. if list1 also contains None values, you need extra checks...

Some more info after comments:
in python3 the range function returns a range object instead of a list (python2)(cfr. Python 3 range Vs Python 2 range)
But when you use it for iteration this doesn't make a difference:
    Python 3.6.4 (v3.6.4:d48ecebad5, Dec 18 2017, 21:07:28)
    >>> list1=['a','b']
    >>> range(0, len(list1))
    range(0, 2)
    >>> for i in range(0, len(list1)):
    ...     print(list1[i])
    ...
    a
    b

The code I entered above gave the same error TypeError: 'int' object is not iterable in python3
The problem is that you want to iterate over 2 things and only provide 1 iterable
cfr. object not iterable on treehouse 
and in this case the second iterable is not provided.
When you do not provide a second iterable , it will iterate over the only list you provide. So it will think (see example below) 0 is the first thing to iterate over and 1 is the second thing to iterate over, and 0 and 1 are ints and thus not iterable.
>>> for i,j in [0,1]:
...     print i
...
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'int' object is not iterable
>>> for i,j in [0,1],:
...     print i
...
0

