Python, ordena una lista por otra lista

Tengo una lista a :

 a = ['c','d','b','a','e'] 

y una lista b :

 b = ['a001','b002','c003','d004','e005'] 

y cómo podría obtener mi lista c como sigue:

 c = ['c003','d004','b002','a001','e005'] 

Básicamente, ordene b usando parte de cada elemento, por el orden definido en a .

Muchas gracias.

Puede intentar pasar una función lambda al parámetro key de la función incorporada sorted() :

 a = ['c', 'd', 'B', 'a', 'e'] b = ['a001', 'B002', 'c003', 'd004', 'e005'] c = sorted(b, key = lambda x: a.index(x[0])) # ['c003', 'd004', 'b002', 'a001', 'e005'] 

Puedes hacerlo usando la key llamada argumento de sorted() :

 c = sorted(b, key = lambda e: a.index(e[0])) 

Si tiene una lista muy grande, las soluciones que usan .index no serán muy eficientes ya que la primera lista será index para cada entrada en la segunda lista. Esto tomará tiempo O (n ^ 2).

En su lugar, puede construir una asignación de clasificación:

 order = {v:i for i,v in enumerate(a)} c = sorted(b, key=lambda x: order[x[0]])