Try a simpler version first:
ret = 
for i in l:
if isinstance(i, list) or isinstance(i, tuple):
# Append the contents of the item.
# Append the item itself.
In this example, flatten([[1,2,3],4,5,[6,[7,8]]]) returns [1,2,3,4,5,6, [7,8]].
The problem here is that a sublist can itself contain a list.
It would be nice if there were a function which, when given [6,[7,8]], would return [6,7,8] so that you could append those items. But that's exactly what flatten does! Try adding prints to tell you what was passed in and what is returned.