gpt4 book ai didi

python - 简单递归函数中的矛盾输出

转载 作者:太空宇宙 更新时间:2023-11-04 03:13:36 24 4
gpt4 key购买 nike

注意:该函数的目标是删除重复(重复)字符。

现在对于相同的给定递归函数,不同的参数会弹出不同的输出:

def rd(x):
if x[0]==x[-1]:
return x
elif x[0]==x[1]:
return rd(x[1: ])
else:
return x[0]+rd(x[1: ])
print("Enter a sentence")
r=raw_input()
print("simplified: "+rd(r))

仅当重复字符在字符串的前六个字符内时,此函数才适用于参数,例如:

如果 r=abcdeeeeeeeeefghijk 或者如果 r=abcdeffffffghijk

但如果重复字符在前六个字符之后,则输出与输入相同,即输出=输入。这意味着使用下面给定的“r”值,该函数不起作用:

if r=abcdefggggggggghijkde(重复字符在前六个字符之后)

最佳答案

你的功能不能正常工作的原因是你首先if x[0]==x[-1],在那里你检查当前子字符串的第一个和最后一个字符,但是离开有很多可能性,例如 affffffaasdkkkkkk,让我们看看为什么:

示例 1:'affffffa'

这很明显吧?

示例 2:'asdkkkkkk'

这里我们开始处理您函数的第 3 种情况,然后再次

'a' +rd('sdkkkkkk')
'a'+'s' +rd('dkkkkkk')
'a'+'s'+'d' +rd('kkkkkk')

当我们在 'kkkkkk' 时停止,因为第一个和最后一个是相同的

示例 3:'asdfhhhhf'

这里与示例 2 相同,在递归链中我们到达 fhhhhf 并且这里的第一个和最后一个相同所以它保持不变

如何解决?,很简单,正如其他人已经展示的那样,首先检查字符串的长度

def rd(x):
if len(x)<2: #if my string is 1 or less character long leave it untouched
return x
elif x[0]==x[1]:
return rd(x[1: ])
else:
return x[0]+rd(x[1: ])

这里有替代和迭代的方法来做同样的事情:你可以使用来自 itertools recipesunique_justseen 配方

from itertools import groupby
from operator import itemgetter

def unique_justseen(iterable, key=None):
"List unique elements, preserving order. Remember only the element just seen."
# unique_justseen('AAAABBBCCDAABBB') --> A B C D A B
# unique_justseen('ABBCcAD', str.lower) --> A B C A D
return map(next, map(itemgetter(1), groupby(iterable, key)))

def clean(text):
return "".join(unique_justseen(text)

测试

>>> clean("abcdefggggggggghijk")
'abcdefghijk'
>>> clean("abcdefghijkkkkkkkk")
'abcdefghijk'
>>> clean("abcdeffffffghijk")
'abcdefghijk'
>>>

如果你不想导入任何东西,这是另一种方式

def clean(text):
result=""
last=""
for c in text:
if c!=last:
last = c
result += c
return result

关于python - 简单递归函数中的矛盾输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37092752/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com