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

时间:2016-03-02 06:49:23

标签: python

我希望在保持格式相同的同时从这样的单词列表中删除所有标点符号: 这句话是:我要回家了。我会看到,如果我能做到的话!我会看到吗?

这就是我的数据集的样子:

[[u'i', u'am', u'going', u'home.', u'i', u'will', u'see,', u'if', u'i', u'can', u'do', u'that!', u'i', u'will', u'see?']]

如何摆脱标点符号?字符串方法不起作用,因为数据在列表格式列表中。

这就是我的尝试:

punc=res
punc=[''.join(c for c in s if c not in string.punctuation) for s in punc]
print(punc)

其中res是上述格式的数据集。这不起作用。

2 个答案:

答案 0 :(得分:2)

您的代码段不起作用的原因是因为列表中有一个列表。您的代码只处理一个平面列表。见下文:

[[u'i', u'am', u'going', u'home.', u'i', u'will', u'see,', u'if', u'i', u'can', u'do', u'that!', u'i', u'will', u'see?']]

如果删除额外的括号,您的代码将起作用:

>>> punc = [u'i', u'am', u'going', u'home.', u'i', u'will', u'see,', u'if', u'i', u'can', u'do', u'that!', u'i', u'will', u'see?']
>>> print [''.join(c for c in s if c not in string.punctuation) for s in punc]
[u'i', u'am', u'going', u'home', u'i', u'will', u'see', u'if', u'i', u'can', u'do', u'that', u'i', u'will', u'see']

您可以通过调用str.strip()

来简化该代码
>>> [x.strip(string.punctuation) for x in punc]
[u'i',
 u'am',
 u'going',
 u'home',
 u'i',
 u'will',
 u'see',
 u'if',
 u'i',
 u'can',
 u'do',
 u'that',
 u'i',
 u'will',
 u'see']

如果你需要处理列表中的列表(比如你的例子),只需添加另一个循环。这也适用于您的原始代码段。

>>> [[x.strip(string.punctuation) for x in y] for y in punc]
[[u'i',
  u'am',
  u'going',
  u'home',
  u'i',
  u'will',
  u'see',
  u'if',
  u'i',
  u'can',
  u'do',
  u'that',
  u'i',
  u'will',
  u'see']]

答案 1 :(得分:1)

我会使用re.sub

>>> from string import punctuation
>>> punctuation
'!"#$%&\'()*+,-./:;<=>?@[\\]^_`{|}~'
>>> s = [[u'i', u'am', u'going', u'home.', u'i', u'will', u'see,', u'if', u'i', u'can', u'do', u'that!', u'i', u'will', u'see?']]
>>> [re.sub(r'[' + re.escape(punctuation) + ']', '', j) for i in s for j in i]
[u'i', u'am', u'going', u'home', u'i', u'will', u'see', u'if', u'i', u'can', u'do', u'that', u'i', u'will', u'see']