如何知道一个单词在python中是否有重复的字母?



我正在用python处理单词,我想看看一个字符串是否有3个或更多的相同字母背对背的出现。除了嵌套的for循环之外,还有更好的方法吗?例如:"helllooooo">

作为另一种选择,循环一次但提前检查下两个字母将工作,并且循环较小,因为您不必检查最后两个字符,并且您可以在发现匹配时立即中断:

for i in range(0, len(instring)-2):
if (instring[i] == instring[i+1] == instring[i+2]):
print(f"{instring[i]} occurs three or more times.")
break

可选地,如果需要知道这些序列在字符串中出现的值或位置,您可以生成一个列表,该列表包含开始一行三字符序列的字母的索引:

print([[i,c] for i,c in enumerate(instring) if i < len(instring)-2 and (c == instring[i+1] == instring[i+2])])

这将生成一个列表的列表,其中包含字母和在单词中找到序列3的位置。

您不需要嵌套循环-只需跟踪您看到的最后一个字符并使用计数器

def atleast3(s):
count = 0
last = None
for c in s:
if c == last:
count += 1
if count >= 3:
return True
else:
count = 1
last = c
return False

一个循环可以工作

string = 'hellooo'
res = ''
prev_item = ''
for item in string:
if item == prev_item:
res += '1'
else:
res += '0'
prev_item = item
print(res) #'0001011'

if '11' in res:
print('Yes')
else:
print('No')

可能有更好的方法(通常有)但是如果你正在寻找任何在字符串中连续重复至少n次的字符,则:

def has_repeats(s, n=3):
for i in range(len(s)-n+1):
if (a := s[i:i+n]).count(a[0]) == n:
return True
return False
print(has_repeats('helllooooo'))

输出:

True

n默认值为3。如果需要,可以重写为任何数字。

如果你正在寻找一个由3个字符组成的序列,那么这可能会更快:

def has_3_repeats(s):
for t in zip(s, s[1:], s[2:]):
if t.count(t[0]) == 3:
return True
return False

可以用正则表达式非常简洁地完成

>>> import re
>>> re.findall(r"((?P<s>[a-zA-Z0-9])(?P=s){2,})", "hellllooooooo")
[('llll', 'l'), ('ooooooo', 'o')]

有这样的工具。itertools.groupby将根据主键(在本例中是单词中的下一个字母)中的每个更改进行分组。它的第二项是一个迭代器,将输出类似值的项(连续字母)。

>>> import itertools
>>> for letter, seq in itertools.groupby("hellloooooooo"):
...     sz = len(list(seq))
...     if sz >= 3:
...             print(letter, sz)
... 
l 3
o 8

如果您只关心查找第一个序列,则可以提前跳出循环,如

for _, seq in itertools.groupby("hellloooooooo"):
if len(list(seq)) >= 3:
has_3 = True
break
else:
has_3 = False

想法是将shift字与比较,

首先,从给定的单词

创建Pandas系列
import pandas as pd
s = pd.Series(list(w))
print(s)
0    h
1    e
2    l
3    l
4    l
5    o
6    o
7    o
8    o
9    o
dtype: object

然后你可以分组和shift系列找到连续字符

m = s.groupby(s).filter(lambda g: g.eq(g.shift().bfill()).sum() >= 3)
print(m)
2    l
3    l
4    l
5    o
6    o
7    o
8    o
9    o
dtype: object

如果要确定重复字符和重复次数

print(m.value_counts())
o    5
l    3
dtype: int64

如果要查找重复字符的位置

i = m.groupby(m).apply(lambda g: g.iloc[[0, -1]].index.tolist()).to_dict()
print(i)
{'l': [2, 4], 'o': [5, 9]}

这是我做的一个函数,如果单词有重复的字母,它应该返回True,如果没有,则返回False

def repeated_letters(word:str):
count = 0
for i in range(len(word) -1):
if word[i] == word[i+1]:
count += 1
if count == 2:
return True
else:
count = 0
return False

相关内容

  • 没有找到相关文章

最新更新