从字符串中删除标点符号并将其附加到 Python 中的列表

Removing Punctuation from a String and Appending it to a List in Python

我是 python 学习者。试图从字符串列表中删除标点符号并创建一个新列表但失败了。

string_list = ['Jingle Bells.', "Donkey Kong's", "Jumping Jehosophat;"]
strings_modified = []
for s in string_list:
    strings_modified.append.str(s).translate(None, string.punctuation)

我收到的错误是:

---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
<ipython-input-316-5c979f5c8af8> in <module>()
      2 strings_modified = []
      3 for s in string_list:
----> 4     strings_modified.append.str(s).translate(None, string.punctuation)

AttributeError: 'builtin_function_or_method' object has no attribute 'str'

看来你的代码很复杂。如果我们有一个函数 fcn 执行删除操作,我们可以使用 Python 的列表解析来生成输出。

类似于:[fcn(s) for s in string_list]。现在你只需要写fcn

既然你已经知道翻译,我们可以写成

[s.translate(None, string.punctuation) for s in string_list]

正如在对原始 post 的评论中提到的那样,字符串中有一个拼写错误

strings_modified.append.str(s)

一定是

strings_modified.append(str(s))

但由于 translate 方法的签名已在 Python 3 中更改,新版本可能如下所示:

trans_dict = {ord(i):None for i in string.punctuation}

for s in string_list:
    strings_modified.append(s.translate(trans_dict))  

或者,使用列表理解(更多 Pythonic)

strings_modified = [s.translate(trans_dict) for s in string_list]

您的代码有错别字:

strings_modified.append.str(s).translate(None, string.punctuation)

这就是您遇到的错误,您正试图从一个名为 append 的 'builtin_function_or_method' 中调用一个名为 str 的函数,它没有该方法,因为它不能那样工作!

您的代码应该(可能取决于您的上下文)是:

strings_modified.append(str(s).translate(None, string.punctuation))