名前のセットを作ってリストの最初の見つけるとか?

names = set(a.name for a in before)
after = [next(a for a in before if a.name == n) for n in names]