The UNIX Man's recommendation of using a generator rather than a list is good one. However I would recommend using a generator expressions over yield:
def find_multiples(min=0, max=1000): """Finds multiples of 3 or 5 between min and max.""" return (i for i in xrange(min, max) if i%3==0 or i%5==0) This has the same benefits as using yield and the added benefit of being more concise. In contrast to UNIX Man's solution it also uses "positive" control flow, i.e. it selects the elements to select, not the ones to skip, and the lack of the continue statement simplifies the control flow¹.
On a more general note, I'd recommend renaming the function find_multiples_of_3_and_5 because otherwise the name suggests that you might use it to find multiples of any number. Or even better: you could generalize your function, so that it can find the multiples of any numbers. For this the code could look like this:
def find_multiples(factors=[3,5], min=0, max=1000): """Finds all numbers between min and max which are multiples of any number in factors""" return (i for i in xrange(min, max) if any(i%x==0 for x in factors)) However now the generator expression is getting a bit crowded, so we should factor the logic for finding whether a given number is a multiple of any of the factors into its own function:
def find_multiples(factors=[3,5], min=0, max=1000): """Finds all numbers between min and max which are multiples of any number in factors""" def is_multiple(i): return any(i%x==0 for x in factors) return (i for i in xrange(min, max) if is_multiple(i)) ¹ Of course the solution using yield could also be written positively and without continue.