Python将字符串列表大写

时间:2019-02-27 12:22:30

标签: python list capitalization

我试图在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

我不明白错误的含义。为什么代码将递归中子列表的元素视为列表而不是字符串?

3 个答案:

答案 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']]

注意:当然,这不是最优雅或美观的解决方案,但我不想过多更改您的代码,希望可以解释该问题。