¿Cómo eliminar toda la puntuación en una cadena? (Python)

Por ejemplo:

asking="hello! what's your name?" 

¿Puedo hacer esto?

 asking.strip("!'?") 

Una implementación muy simple es:

 out = "".join(c for c in asking if c not in ('!','.',':')) 

Y sigue agregando cualquier otro tipo de puntuación.

Una forma más eficiente sería

 import string stringIn = "string.with.punctuation!" out = stringIn.translate(stringIn.maketrans("",""), string.punctuation) 

Edición: hay más discusiones sobre la eficiencia y otras implementaciones aquí: La mejor manera de eliminar la puntuación de una cadena en Python

 import string asking = "".join(l for l in asking if l not in string.punctuation) 

filtro con string.punctuation .

Esto funciona, pero podría haber mejores soluciones.

 asking="hello! what's your name?" asking = ''.join([c for c in asking if c not in ('!', '?')]) print asking 

La tira no funcionará. Solo elimina las instancias iniciales y finales, no todas las partes intermedias: http://docs.python.org/2/library/stdtypes.html#str.strip

Divirtiéndose con el filtro:

 import string asking = "hello! what's your name?" predicate = lambda x:x not in string.punctuation filter(predicate, asking)