Это выполнение необработанных строковых операций на C с таблицей подстановки - с этим мало что сравнится, кроме написания вашего собственного кода на C.
Если скорость вас не беспокоит, есть еще один вариант:
exclude = set(string.punctuation) s = ''.join(ch for ch in s if ch notin exclude)
Это быстрее, чем s.replace с каждым символом, но не будет работать так же хорошо, как подходы, не основанные на чистом python, такие как регулярные выражения или string.translate , как вы можете видеть из приведенных ниже таймингов. Для задач такого типа окупается выполнение этого на как можно более низком уровне.
Регулярные выражения достаточно просты, если вы их знаете.
import re s = "string. With. Punctuation?" s = re.sub(r'[^\w\s]','',s)
Ответ 3
Для удобства использования я резюмирую примечание об удалении знаков препинания из строки как в Python 2, так и в Python 3. Пожалуйста, обратитесь к другим ответам за подробным описанием.
Python 2
import string
s = "string. With. Punctuation?" table = string.maketrans("","") new_s = s.translate(table, string.punctuation) # Output: string without punctuation
Python 3
import string
s = "string. With. Punctuation?" table = str.maketrans(dict.fromkeys(string.punctuation)) # OR {key: None for key in string.punctuation} new_s = s.translate(table) # Output: string without punctuation