I suggest that the map function should iterate over self, so that the index function is used instead. That way if index needs to be overloaded, map, may not need to be.
The same applies for the assignment, I suggest implementing some sort of set_index function, which can be overloaded.
That way, handling the overhead of map is not necessary for most special cases.