That's the purpose of lseries(), that I wrote long time ago:

https://github.com/sympy/sympy/blob/master/sympy/core/expr.py#L2558

that's a clean way to get more terms when you need them, while doing the calculation only once. I don't know any other way to do it. Before we merge this PR, I will test what Mathematica does, and also I will test this on some example where terms cancel out.

@skirpichev --- don't we have to do the same for Add?