Python 大写字符串列表列表
Python capitalize list of lists of strings
我正在尝试将列表中的每个字符串大写 python 3. 我正在使用此代码
def capitalize_nested(t):
res=[]
for s in t:
if isinstance(s,list):
capitalize_nested(s)
res.append(s.capitalize())
return res
该代码适用于字符串列表,但不适用于字符串列表的列表,例如当我 运行 它为 t=["asd",["asd"]] 我希望 ["Asd",["Asd"]] 作为输出,而不是我得到以下错误:
Traceback (most recent call last):
File "/home/main.py", line 10, in <module>
print(capitalize_nested(t))
File "/home/main.py", line 6, in capitalize_nested
res.append(s.capitalize())
AttributeError: 'list' object has no attribute 'capitalize'
我不明白这个错误是什么意思。为什么代码将递归中子列表的元素视为列表而不是字符串?
问题是您直接调用 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
在您的代码中,如果 s
的类型是列表,那么在执行 if 语句的内部之后,编译器还将调用 capitalize
方法(未为列表定义 s
).所以你需要一个 else 语句。您还必须附加重复的结果:
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',]])
这应该输出:
['Asd', ['Asd']]
错误已经告诉你问题所在:你正试图在列表中调用 capitalize
,这是不可能的。
这样做的原因:如果 s
是一个列表,那么您正在递归调用您的函数,这很好。但是在递归调用 returns 之后,你调用了 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']]
注意:当然,这不是最优雅或最漂亮的解决方案,但我不想过多更改您的代码,希望它能解释问题。
我正在尝试将列表中的每个字符串大写 python 3. 我正在使用此代码
def capitalize_nested(t):
res=[]
for s in t:
if isinstance(s,list):
capitalize_nested(s)
res.append(s.capitalize())
return res
该代码适用于字符串列表,但不适用于字符串列表的列表,例如当我 运行 它为 t=["asd",["asd"]] 我希望 ["Asd",["Asd"]] 作为输出,而不是我得到以下错误:
Traceback (most recent call last):
File "/home/main.py", line 10, in <module>
print(capitalize_nested(t))
File "/home/main.py", line 6, in capitalize_nested
res.append(s.capitalize())
AttributeError: 'list' object has no attribute 'capitalize'
我不明白这个错误是什么意思。为什么代码将递归中子列表的元素视为列表而不是字符串?
问题是您直接调用 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
在您的代码中,如果 s
的类型是列表,那么在执行 if 语句的内部之后,编译器还将调用 capitalize
方法(未为列表定义 s
).所以你需要一个 else 语句。您还必须附加重复的结果:
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',]])
这应该输出:
['Asd', ['Asd']]
错误已经告诉你问题所在:你正试图在列表中调用 capitalize
,这是不可能的。
这样做的原因:如果 s
是一个列表,那么您正在递归调用您的函数,这很好。但是在递归调用 returns 之后,你调用了 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']]
注意:当然,这不是最优雅或最漂亮的解决方案,但我不想过多更改您的代码,希望它能解释问题。