从单词列表中删除标点符号Python

时间:2018-10-23 14:44:00

标签: python python-3.x

因此,我有一个要删除所有标点符号的单词列表。这是我的代码

def removePunctuation(words):
    return set([s.translate(None, string.punctuation) for s in words])

wordsStripped = removePunctuation(words)

我遇到以下错误

  

TypeError:translate()仅接受一个参数(给定2个参数)

我已经尝试了几种不同的方法来做到这一点,但是没有运气,肯定有更简单的方法吗? 我是python的新手,所以如果这是一个不好的问题,请原谅,任何帮助将不胜感激。

2 个答案:

答案 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)来确定脚本不够快时瓶颈所在的确切位置。