learning data structures and algorithms in python