【问题标题】:Removing Punctuation from a String and Appending it to a List in Python从字符串中删除标点符号并将其附加到 Python 中的列表
【发布时间】:2017-03-14 19:35:19
【问题描述】:

我是一名 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'

【问题讨论】:

  • 追加后需要括号,不需要转换为字符串:strings_modified.append(s.translate(None, string.punctuation))
  • 不要使用append.str(s)使用append(str(s))
  • 问题是我的类型是unicode。 type(string_list[0])unicode 。如果我不使用 str ,我会收到此错误:TypeError: translate() takes exactly one argument (2 given)。所以我最终使用str(s)。但这会产生另一组问题。当我尝试做 for sm in strings_modified: strings_modified.append(sm.replace(" ", "+")) 时,python 只是挂起。 . .
  • @PrestonHager 是对的。它仍然将其转换为字符串。

标签: python string list punctuation


【解决方案1】:

您的代码有错字:

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

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

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

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

【讨论】:

    【解决方案2】:

    正如 cmets 对原帖所说,字符串中有错字

    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]
    

    【讨论】:

      【解决方案3】:

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

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-06-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-07-07
        相关资源
        最近更新 更多