I can't reproduce your problem in either Python 2 or 3 using the following slightly updated and optimized code:
def andSearch(inverseIndex, query):
pepp = set()
for y in (inverseIndex[x] for x in query):
if not pepp:
pepp.update(y)
else:
pepp &= y
return pepp
L = {'Cats':{1}, 'Dogs':{2}, 'Cat':{0,4}, 'Dog':{0,4}, 'Pigs':{3}, 'Animal':{4}}
for query in [['Dog', 'Cat', 'Animal'],
['Dog', 'Cat'],
['Dog', 'Dogs'],
[],]:
print('query = {} ----> {}'.format(query, andSearch(L, query)))
Output with Python 2.7.5:
query = ['Dog', 'Cat', 'Animal'] ----> set([4])
query = ['Dog', 'Cat'] ----> set([0, 4])
query = ['Dog', 'Dogs'] ----> set([])
query = [] ----> set([])
Output with Python 3.3.2:
query = ['Dog', 'Cat', 'Animal'] ----> {4}
query = ['Dog', 'Cat'] ----> {0, 4}
query = ['Dog', 'Dogs'] ----> set()
query = [] ----> set()
...so I can only assume something is misconfigured or messed-up on your system.
(I don't have 'numpy' or scipy
installed, btw.)