我试图做一个代码战测试,需要输入一系列文本,并将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将其转换回列表。