因此,我有一个要删除所有标点符号的单词列表。这是我的代码
def removePunctuation(words):
return set([s.translate(None, string.punctuation) for s in words])
wordsStripped = removePunctuation(words)
我遇到以下错误
TypeError:translate()仅接受一个参数(给定2个参数)
我已经尝试了几种不同的方法来做到这一点,但是没有运气,肯定有更简单的方法吗? 我是python的新手,所以如果这是一个不好的问题,请原谅,任何帮助将不胜感激。
答案 0 :(得分:3)
import string
trans_table = str.maketrans("", "", string.punctuation
def removePunctuation(words):
return set([s.translate(trans_table) for s in words])
wordsStripped = removePunctuation(words)
答案 1 :(得分:1)
您也可以这样做:
words_stripped = ''.join(c for c in s if not c in string.punctuation)
免责声明:以下代码在IPython Shell中使用Python 2语法-string.translate
函数在Python 3中似乎已更改-您的上述解决方案是针对Python 2的。
@Chris_Rands在对此答案的评论中提到的寻址时间:
In [17]: %timeit s.translate(None, string.punctuation)
100000 loops, best of 3: 15.6 µs per loop
In [18]: %timeit ''.join(c for c in s if not c in string.punctuation)
1000 loops, best of 3: 1.04 ms per loop
In [19]: %timeit ''.join(c for c in s if not c in punctuation_set)
1000 loops, best of 3: 632 µs per loop
这是通过将s
设置为在此处生成的5个段落来完成的:https://www.lipsum.com/feed/html
所以,是的,到目前为止,翻译方法是最快的。同时...根据您需要执行此操作的次数,您实际上不必为此担心。
使用您能想到的最简单的方法,然后使用概要分析工具(CProfiler)来确定脚本不够快时瓶颈所在的确切位置。