Problem Solving with Algorithms and Data Structures
interactivepython.org
interactivepython.org
However, I'm not a big fan of the fact that all the collection ADTs are strict ports from Java, with far too many getSpam/setSpam methods and not enough __double_underscores__.
One thing that would be really useful would be time/space efficiency in big-O notation, but I'm not sure that would necessarily benefit the audience you're going for?