一个改变嵌套列表的程序

时间:2013-08-26 02:23:01

标签: python

有人可以帮我做两件事:

  1. 查看代码并查看是否可以更好地编写代码。
  2. 完成此程序。我陷入了试图将列表恢复原状的困境。即列表的嵌套列表。
  3. 我们走了:

    t = ['a', 'b', ['c', 'd'], ['e'], 'f']
    
    def capitalize_list(t):
        L = []
        N = []
        for i in range(len(t)):
            if type(t[i]) == str:
                L.append(t[i].capitalize())
            if type(t[i]) == list:
                L.extend(t[i])
                for s in L:
                    N.append(s.capitalize())
         print N 
    
     capitalize_list(t)
    

    此代码打印:

    ['A', 'B', 'C', 'D', 'E', 'F']
    

    我需要它打印:

    ['A', 'B', ['C', 'D'], ['E'], 'F']
    

2 个答案:

答案 0 :(得分:2)

您可以使用递归:

def capitalize_list(t):
    N = []
    for i in range(len(t)):
        if type(t[i]) == str:
            N.append(t[i].capitalize())
        if type(t[i]) == list:
            N.append(capitalize_list(t[i]))
    return N

输出:

['A', 'B', ['C', 'D'], ['E'], 'F']

答案 1 :(得分:1)

递归执行此操作的另一种方法:

def capitalize(item):
    if type(item) is str:
        return item.capitalize()
    if type(item) is list:
        return map(capitalize, item)

你甚至可以做到

def capitalize(item):
    try:
        return item.capitalize()
    except AttributeError:
        return map(capitalize, item)

- 对于任何拥有它的对象(例如普通字符串或unicode字符串)使用大写方法,并尝试迭代任何没有的对象。