dke*_*tre 7 python sorting count python-3.x
假设用户输入:
"daslakndlaaaaajnjndibniaaafijdnfijdnsijfnsdinifaaaaaaaaaaafnnasm"
Run Code Online (Sandbox Code Playgroud)
你将如何找到最高数量的连续"a",你将如何删除"a"并且只留下其中的2个而不是之前的大量数字.
我正在考虑将每个字母附加到一个新的空列表中,但我不确定这是正确的还是该怎么做.
我真的不知道从哪里开始,但这就是我的想法:
接下来我什么都不知道.
第二次编辑(沿着这些行):
sentence = input("Enter your text: ")
new_sentance = " ".join(sentence.split())
length = len(new_sentance)
alist = []
while (length>0):
alist
print ()
Run Code Online (Sandbox Code Playgroud)
从输入字符串开始:
input = "daslakndlaaaaajnjndibniaaafijdnfijdnsijfnsdinifaaaaaaaaaaafnnasm"
Run Code Online (Sandbox Code Playgroud)
要获得最大连续出现次数,您可以使用:
max(len(s) for s in re.findall(r'a+', input))
Run Code Online (Sandbox Code Playgroud)要仅用 2 个“a”替换最长的完整“a”序列,您可以使用:
maxMatch = max(re.finditer(r'a+', input), key= lambda m: len(m.group()))
output = input[:maxMatch.start()] + "aa" + input[maxMatch.end():]
Run Code Online (Sandbox Code Playgroud)
首先,我MatchObject通过根据 regex 测试输入字符串来获得 s的可迭代对象a+,然后使用max来获得MatchObject最大长度。然后,我将原始字符串的部分拼接到匹配的开头、字符串“aa”以及匹配结束后的原始字符串的部分,以给出最终的输出。
要将所有出现的超过 2 个“a”替换为 2 个“a”,您可以使用:
output = re.sub(r'a{3,}', "aa", input)
Run Code Online (Sandbox Code Playgroud)我在评论和其他问题中看到了一些正则表达式的答案,所以我将采取不同的方式。仅仅获得计数就可以通过多种不同的方式来完成。
from itertools import groupby
inp = 'daslakndlaaaaajnjndibniaaafijdnfijdnsijfnsdinifaaaaaaaaaaafnnasm';
char_groups = groupby(inp, lambda char:char=='a')
counts = [len(list(group)) for char, group in char_groups]
# We know every other element of 'counts' is an 'a' element.
# We just need to know whether to start at zero or one.
# If inp starts with 'a', start at 0. Otherwise start at 1.
max(counts[not inp.startswith('a')::2]) # 11
Run Code Online (Sandbox Code Playgroud)
我很确定我见过的两个正则表达式答案都会用两个“a”替换每个“aa+”字符串。如果您只想将最长的 'a' 字符串替换为 'aa' 并保留其余部分:
char_groups = groupby(inp)
counts = [(char, len(list(group))) for char, group in char_groups]
max_idx = max(range(len(counts)), key=lambda i:counts[i][1] if counts[i][0]=='a' else 0)
result = ''.join(char*count for char, count in counts[:max_idx]) + 'aa' + ''.join(char*count for char, count in counts[max_idx+1:])
# 'daslakndlaaaaajnjndibniaaafijdnfijdnsijfnsdinifaafnnasm'
Run Code Online (Sandbox Code Playgroud)