Reemplazo en el lugar de todas las apariciones de un elemento en una lista en python

Supongamos que tengo una lista:

myl = [1, 2, 3, 4, 5, 4, 4, 4, 6] 

¿Cuál es la forma pythonica más eficiente y simple de reemplazar en el lugar ( doble énfasis ) todas las ocurrencias de 4 con 44 ?

También tengo curiosidad por saber por qué no hay una forma standard de hacer esto (especialmente, cuando las strings tienen un método de replace no en el lugar ).

Podemos iterar sobre la lista con enumerate y reemplazar el valor antiguo con un valor nuevo, como este

 myl = [1, 2, 3, 4, 5, 4, 4, 4, 6] for idx, item in enumerate(myl): if item == 4: myl[idx] = 44 print myl # [1, 2, 3, 44, 5, 44, 44, 44, 6] 
 myl[:] = [x if x != 4 else 44 for x in myl] 

Realice el reemplazo no en el lugar con una comprensión de la lista y, a continuación, asigne los nuevos valores a la lista original si realmente desea cambiar el original.

 for item in myl: if item ==4: myl[myl.index(item)]=44 
 while True: try: myl[myl.index(4)] = 44 except: break 

El enfoque try-except , aunque más pythonic , es menos eficiente. Este progtwig de timeit en ideone compara al menos dos de las respuestas proporcionadas en este documento.