You can implement a shuffle function yourself using the Fisher-Yates algorithm for example, in which case you can use your own seeded random number generator. You can then implement another unshuffle algorithm using the same seeded RNG. I've adapted my answer where I've done this previously to Python:
import random
def seeded_shuffle(l, seed):
rng = random.Random(seed)
for i in range(len(l) - 1, -1, -1):
j = rng.randint(0, i)
l[i], l[j] = l[j], l[i]
def seeded_unshuffle(l, seed):
rng = random.Random(seed)
indices = [rng.randint(0, i) for i in range(len(l) - 1, -1, -1)]
for i, j in enumerate(indices[::-1]):
l[i], l[j] = l[j], l[i]
a = [1, 2, 3, 4, 'a', 'b', 'D', '#']
seed = 42
seeded_shuffle(a, seed)
print(a) # [4, 'a', 'D', '#', 3, 'b', 1, 2]
seeded_unshuffle(a, seed)
print(a) # [1, 2, 3, 4, 'a', 'b', 'D', '#']