【问题标题】:Count consecutive non-binary and non-single character strings计算连续的非二进制和非单个字符串
【发布时间】:2019-10-26 22:39:38
【问题描述】:

我需要在 .txt 文件中列出一个列表,例如这个: bananaapplebananabananabananaappleapplebanana 它们之间没有逗号或空格,并且输出 最大次数 我指定的特定字符串连续出现。因此,例如,在上面的示例中,它将是:

banana: 3, apple: 2

我查看了几个选项,例如这个: Counting consecutive characters in a string 但我发现的大多数选项要么计算连续的二进制数字,要么计算连续的单个字符,但不计算完整的单词。其他示例假设单词以某种方式分开,例如在每个单词换行的列表中。我已经尝试过max(len),但这在这里不起作用,因为我计算的是对象。

我意识到我需要做的是使用某种计数器来迭代单行列表并计算每个单词的连续出现次数,我在代码中以某种方式指定了这些单词,并覆盖了最高数量的当它遇到相同单词的新​​的、更高的连续出现次数时连续出现。

有什么例子可以说明如何做到这一点?

【问题讨论】:

    标签: python


    【解决方案1】:

    有趣的问题。也许这可能会有所帮助。我会使用正则表达式库。然后作为一个天真的开始,您可以遍历您创建的单词列表并应用 re.finditer() 函数。

    所以是这样的:

    import re
    long_string = "applesapplesbananasapples"
    word = r'apples'
    res = [(mtch.start(0), mtch.end(0)) for mtch in re.finditer(word, long_string)]
    

    这会给你一个像这样的元组列表: [(0, 6), (6, 12), (19, 25)]

    然后您可以遍历该列表并比较相邻元组的最终值和第一个值。如果它们匹配,那么你有连续的单词,如果不是,那么它们不是连续的,你在那里结束计数。

    我没有编码第二部分,因为那应该是微不足道的,但希望第一部分有所帮助。如果没有,您需要更全面的解决方案,请告诉我。

    【讨论】:

    • 如果要查找的字符串在 CSV 文件中(它会从 CSV 的第一行中提取字符串),然后程序会将指定的 .txt 提取到对比一下?
    • 在 csv 文件中,它们会有一个分隔符。所以最好的方法是使用标准库中的 csv 模块。然后,您可以使用 .sniff() 方法获取方言,并从那里获取分隔符。然后我会在分隔符上“拆分”。然后,您将拥有每个单词的列表,并且可能完全通过正则表达式的内容。在幕后,csv 模块为您做了很多繁重的工作。看看各种方法,看看是否可以使用其中一些方法而不是重新发明轮子。
    • 即使我要查找连续的单词,该列表是否有效?
    • 那么您可以通过查看列表中的连续值来测试这一点。因此,使用带有 .sniff() 的 csv 模块,您可以获得分隔符并创建一个 csv 阅读器对象并遍历 csv 中的每一行。每行将是一个列表。然后,您可以比较列表中的连续条目,记录任何条目,然后移至下一行。我会避免从你的 csv 中读取一个巨大的字符串,因为 csv 模块已经这样做了,在新行上拆分,为你找到所有的分隔符。先看看使用 csv 的输出,因为我认为这会告诉你你不需要解析一个巨大的字符串。
    • 问题从一个长字符串的 .txt 演变为 csv。打开一个关于 csv 的新问题,我们可以看看解决方案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多