The performance is a function of the query string length and the order string length, because str.index is a linear search. The obvious speedup, should the order string be extremely long, is to turn the order string into a lookup table:
order = {c: i for i, c in enumerate("bca")}
"".join(sorted("ccbaba", key=lambda c: order[c]))
The performance is a function of the query string length and the order string length, because str.index is a linear search. The obvious speedup, should the order string be extremely long, is to turn the order string into a lookup table: