在尝试学习递归时得到奇怪的结果

  • 本文关键字:结果 学习 递归 python
  • 更新时间 :
  • 英文 :


我试图做一个代码战测试,需要输入一系列文本,并将camel大小写分解,将它们分成单词列表,我希望结果是

['break', 'Camel', 'Case', 'Ez']

但我不知道我的代码的哪一部分导致了的问题

word_list = []
def solution(s):
global word_list
if any([char.isupper() for char in s][1:]):
# print([char.isupper() for char in s][1:])
for i, char in enumerate(s):
if i == 0:
continue
if char.isupper():
word_list.append(s[:i])
solution(s[i:])
else:
word_list.append(s)
return word_list
# print("breakCamelCaseEz")
print(solution("breakCamelCaseEz"))

我得到的结果是

['break', 'Camel', 'Case', 'Ez', 'CamelCase', 'Ez', 'breakCamel', 'Case', 'Ez', 'breakCamelCase', 'Ez']

此外当我试图在函数中添加一个计数器来查找问题时,我得到了更多的问题

word_list = []
indexing = 0
def solution(s):
global word_list, indexing
indexing += 1
if any([char.isupper() for char in s][1:]):
print([char.isupper() for char in s][1:])
# break it down
for i, char in enumerate(s):
if i == 0:
continue
if char.isupper():
word_list.append(s[:i])
print("{}-{}".format("loop", indexing))
solution(s[i:])
else:
print("{}-{}-{}".format("else", indexing, s))
word_list.append(s)
return word_list
# print("breakCamelCaseEz")
print(solution("breakCamelCaseEz"))

我已经读了很多遍代码,但仍然无法理解

*编辑的第一部分

def break_camel(string):
output = []
currword =[]
for c in string:
if c.islower():
currword.append(c)
else:
output.append( ''.join(currword))
currword = []
return output

也可以完成

import re
def solution(word):
return list(filter(None, re.split('([A-Z][a-z]*)', word)))
print(solution("breakCamelCaseEz"))

输出:

['break', 'Camel', 'Case', 'Ez']

我使用filter从列表中删除空值,然后在filter对象上使用list将其转换回列表。

最新更新