Recently I've been learning/improving my python by solving the Project Euler problems in python. This has worked really well for me because:
- It is fun and competitive, so I'm motivated to keep going
- It forces me to use the python data structures in a really natural way to get the performance I need, so has taught me a lot about lists, sets, strings, iteration etc.
- Most of the problems need less than a page of code to solve, so you have more time to think about polishing or rewriting in a more elegant way
- Python copes with large integers really easily, and so it just feels like the right language to use
I'd thoroughly recommend this.