【问题标题】:.split gives empty elements in list when chaining .replace methods.split 在链接 .replace 方法时给出列表中的空元素
【发布时间】:2019-05-16 15:52:08
【问题描述】:

我是 Python 新手,我正在编写一段并分解每个句子中的单词数,然后获取每个句子的平均字数。在我做这个数学之前,我意识到我需要清理数据才能进入每个句子的单个单词。

我正在链接 .replace() 段落的方法来获取单个句子,并且当我 .split() 在“。”上时最后我得到了一个额外的空字符串元素,使我的句子计数为 16 而不是 15(正确的结果)。

感谢您的帮助!!

我找到了一些描述正常空格split 问题的链接,以及新行split 选项,但这也无济于事,因为它不是新行问题?

def get_average_sentence_length(text):
    sentences_in_text = []
    text = text.replace("?", ".").replace("!", ".").replace(",", " ").split(".")
    sentences_in_text = text
    return sentences_in_text

print(get_average_sentence_length(TEXT))

你可以看到最后一个元素是''。为了简洁起见,我已经截断了该段的其余部分。

['..., '我迫不及待地想享受 A Brand New Jay', '这似乎是探索生活和爱情的好时机', '']

【问题讨论】:

    标签: python replace split


    【解决方案1】:

    split 将尾随分隔符视为在空字段之前:

    >>> text = "foo.bar."
    >>> text.split(".")
    ['foo', 'bar', '']
    

    如果您想避免这种情况,请删除尾随分隔符:

    >>> text.rstrip(".").split(".")
    ['foo', 'bar']
    

    【讨论】:

    • 感谢您的帮助!!这两个答案都解决了我的问题并教会了我一些东西:)
    【解决方案2】:
    sentences_in_text = text
    

    将其替换为:

    sentences_in_text = [t for t in text if t]
    

    这样你就可以过滤掉那些"" 空字符串

    【讨论】:

    • 感谢您的帮助!!这两个答案都解决了我的问题并教会了我一些东西:)
    【解决方案3】:

    您可以在返回结果之前进行过滤。像这样

    def get_average_sentence_length(text):
        sentences_in_text = text.replace("?", ".").replace("!", ".").replace(",", " ").split(".")
        return list(filter(None, sentences_in_text))
    
    print(get_average_sentence_length('some? text. hello!'))
    

    【讨论】:

    • 感谢您的帮助!!这是我不知道解决此问题的另一种方法。 :)
    猜你喜欢
    • 2020-01-24
    • 1970-01-01
    • 1970-01-01
    • 2017-12-18
    • 2017-10-04
    • 2023-03-16
    • 1970-01-01
    • 2018-01-04
    • 2013-02-17
    相关资源
    最近更新 更多