首页 >后端开发 >Python教程 >在 Python 中从字符串中删除标点符号的最有效方法是什么?

在 Python 中从字符串中删除标点符号的最有效方法是什么?

Mary-Kate Olsen
Mary-Kate Olsen原创
2024-12-26 06:30:27189浏览

What's the Most Efficient Way to Remove Punctuation from Strings in Python?

从字符串中删除标点符号:最佳方法

从字符串中删除标点符号是许多编程场景中的常见任务。虽然存在多种方法,但选择最有效的一种可能具有挑战性。

无与伦比的效率:字符串翻译

为了实现最高效率,字符串翻译占据主导地位。使用 s.translate(None, string.punctuation) 可确保在 C 中执行原始字符串操作,从而提供无与伦比的速度。对于 Python 3.9 及更高版本,利用 s.translate(str.maketrans('', '', string.punctuation))。

非性能关键场景的替代方法

如果速度不是最重要的,请考虑以下替代方案:

  • 设置排除: 创建一组标点符号,并使用集合理解将它们从字符串中排除(例如, ''.join(ch for ch in s if ch not in excex))。
  • 正则表达式: 利用正则表达式来匹配和删除标点符号(例如 regex.sub('', s),其中 regex 是预编译的正则表达式)。

性能比较

为了衡量这些方法的性能,执行了以下代码:

import re, string, timeit

s = "string. With. Punctuation"
exclude = set(string.punctuation)
table = string.maketrans("","")
regex = re.compile('[%s]' % re.escape(string.punctuation))

def test_set(s):
    return ''.join(ch for ch in s if ch not in exclude)

def test_re(s):
    return regex.sub('', s)

def test_trans(s):
    return s.translate(table, string.punctuation)

def test_repl(s):
    for c in string.punctuation:
        s=s.replace(c,"")
    return s

print "sets      :",timeit.Timer('f(s)', 'from __main__ import s,test_set as f').timeit(1000000)
print "regex     :",timeit.Timer('f(s)', 'from __main__ import s,test_re as f').timeit(1000000)
print "translate :",timeit.Timer('f(s)', 'from __main__ import s,test_trans as f').timeit(1000000)
print "replace   :",timeit.Timer('f(s)', 'from __main__ import s,test_repl as f').timeit(1000000)

结果显示如下:

  • 字符串翻译: 2.12455511093秒
  • 正则表达式:6.86155414581秒
  • 设置排除:19.8566138744秒
  • 字符替换:28.4436721802秒

结论

在优化速度时,字符串翻译是无可争议的选择。对于性能不太密集的场景,集合排除或正则表达式等替代方法可以提供令人满意的结果。

以上是在 Python 中从字符串中删除标点符号的最有效方法是什么?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn