在Python中查找字符串中是否有字符组重复

-4 投票
3 回答
2975 浏览
提问于 2025-04-18 12:29

我还是个初学者,想知道怎么判断一个字符串里有没有重复的字符模式。

比如说:“aabcdabcdabcdabcd”,这里面有四个字符 - 'abcd' 是在重复的。

但是我不知道到底有多少个字符在重复。

而且这个模式并不确定,我也不知道是什么。“aabcdabcdabcdabcd”只是一个例子。

这个模式可以是任何顺序的。请帮帮我。

我的代码是:

其实我根本不知道这个字符串是什么!

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"

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

3 个回答

0

在自然语言处理(NLP)中,这些被称为n-grams。对于大多数常见的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个n-grams:

ngrams_found.most_common(5)
0

我自己也是Python的新手,最让我兴奋的事情之一就是它很容易就能开始处理字符串中的字符。

要解决你的问题,我会从这里开始:

for letter in string:
    # work through the string and check for repeated patterns
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

撰写回答