我试图在python 3的列表中大写每个字符串。我正在使用此代码
Decimal
该代码适用于字符串列表,但不适用于字符串列表,例如当我为t = [“ asd”,[“ asd”]]运行它时,我期望[“ Asd”,[“ Asd”]]作为输出,相反,我得到以下错误:
def capitalize_nested(t):
res=[]
for s in t:
if isinstance(s,list):
capitalize_nested(s)
res.append(s.capitalize())
return res
我不明白错误的含义。为什么代码将递归中子列表的元素视为列表而不是字符串?
答案 0 :(得分:0)
问题是您直接调用capitalize_nested
而不是在代码的一个分支中附加capitalize_nested
。试试这个:
def capitalize_nested(t):
res=[]
for s in t:
if isinstance(s,list):
res.append(capitalize_nested(s))
else:
res.append(s.capitalize())
return res
答案 1 :(得分:0)
在您的代码中,如果s
的类型是列表,则在执行if语句的内部之后,编译器还将调用capitalize
方法(未为列表{{1定义) }})。因此,您需要其他陈述。另外,您还必须附加重复的结果:
s
这应该输出:
def capitalize_nested(t):
res=[]
for s in t:
if type(s) == list:
res.append(capitalize_nested(s))
else:
res.append(s.capitalize())
return res
print capitalize_nested(['asd', ['asd',]])
答案 2 :(得分:0)
该错误已经在告诉您问题所在:您正在尝试在列表上调用capitalize
,这是不可能的。
这样做的原因:如果s
是一个列表,则您递归地调用函数,这很好。但是在递归调用返回后,您正在调用res.append(s.capitalize())
,这会给您带来错误,因为s
是一个列表,因此没有capitalize()
函数。
最好这样做:
def capitalize_nested(t):
res=[]
for s in t:
if isinstance(s, list):
to_append = capitalize_nested(s)
else:
to_append = s.capitalize()
res.append(to_append)
return res
示例:
输入:["asd",["asd"]]
输出:['Asd', ['Asd']]
注意:当然,这不是最优雅或美观的解决方案,但我不想过多更改您的代码,希望可以解释该问题。