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

时间:2017-03-14 19:35:20

标签: python string list punctuation

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

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'

3 个答案:

答案 0 :(得分:2)

您的代码输入错误:

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

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

您的代码应该(可能取决于您的具体情况):

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

答案 1 :(得分:1)

正如对原帖的评论中已经提到的那样,字符串

中存在拼写错误
strings_modified.append.str(s)

一定是

strings_modified.append(str(s))

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

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]

答案 2 :(得分:0)

看起来你的代码非常复杂。如果我们有一个执行删除的函数fcn,我们可以使用Python的列表推导来生成输出。

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

由于您已经了解翻译,我们可以将其写为

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