【问题标题】:Find if groups of characters are repeated in a string in python查找字符组是否在python中的字符串中重复
【发布时间】:2014-07-08 12:44:29
【问题描述】:

我是一个初学者,我想知道如何确定一个字符串是否包含在某个模式中重复出现的字符。

示例:“aabcdabcdabcdabcd” 这里有四个字符 - 'abcd' 矿石被重复。 但我不知道重复了多少个字符。

模式不确定。我不知道。 “abcd 只是”一个例子。 模式可以是任何顺序 请帮忙。 我的代码是:

我实际上不知道字符串!

s1=str("aabcdabcdabcd")
x=0
z=""
for i in range (1,len(s1)):
    z=s1[i:i+5]
    s1.replace(z,"",1)
    if z in s1:
          x+=1
    if x!=0:
          print "yes":
    else:
          print "no"

上述程序仅适用于给定的字符串。我希望它能够评估任何字符串。

【问题讨论】:

  • 欢迎来到 Stack Overflow!看起来您希望我们为您编写一些代码。虽然许多用户愿意为陷入困境的编码人员编写代码,但他们通常只有在发布者已经尝试自己解决问题时才会提供帮助。展示这项工作的一个好方法是包含您迄今为止编写的代码、示例输入(如果有的话)、预期输出和您实际获得的输出(控制台输出、堆栈跟踪、编译器错误 - 不管是什么适用的)。您提供的详细信息越多,您可能收到的答案就越多。检查FAQHow to Ask
  • 所以你想检测某种可能在之前或之后发生的循环?你想要最长的周期?
  • 你能更详细地解释你的问题吗?你想找到特定的模式“abcd”还是任何模式?如果是这样,模式的最小长度是多少?
  • 你只想要重复的每个字符的计数吗?
  • 为什么是abcd 而不是bcda?它也重复了。

标签: python string


【解决方案1】:

这将找到所有重复的字母 - 然后你可以过滤你想要的集合。

cstr = 'aabcdabcdabcdabcd'
dd = {}
for ii, ch in enumerate(cstr):
    # find all sequences of 3-6 characters long
    for jj in range(3,7):
        wrd = cstr[ii:ii+jj]
        if not len(wrd) == jj:
            break

        dd.setdefault(wrd, 0)
        dd[wrd] += 1

# find any "word" that occurs more than once
for k, v in dd.iteritems():
    if v > 2:
        print k, v

【讨论】:

    【解决方案2】:

    我自己对 Python 还比较陌生,最初我发现最令人兴奋的一件事是,开始使用构成字符串的字符非常容易。

    要回答您的问题,我将从:

    for letter in string:
        # work through the string and check for repeated patterns
    

    【讨论】:

    • 我不想统计字母的重复次数,我想找出一组字母是否重复。
    【解决方案3】:

    在自然语言处理中,这些被称为 ngram,对于大多数常见的 NLP 任务,nltk 库非常有用:

    from nltk.util import ngrams
    from collections import Counter
    
    s = 'aabcdabcdabcdabcd'
    max_ngram = 5
    minimum_count = 2
    ngrams_found = Counter()
    
    for x in range(max_ngram-1):
        ngrams_found += Counter(["".join(ngram) for ngram in ngrams(s, x+minimum_count)])
    for key, val in ngrams_found.items():
        if val < minimum_count:
            del ngrams_found[key]
        else:
            print(key, val)
    

    Counter 对象还允许您打印 x 个最常见的 ngram:

    ngrams_found.most_common(5)
    

    【讨论】:

    • 不确定这是用户要求的。
    猜你喜欢
    • 2018-05-15
    • 2018-08-27
    • 2011-04-04
    • 1970-01-01
    • 2023-04-04
    • 2016-01-15
    • 2014-02-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多