2

有人可以帮我做两件事:

  1. 查看代码,看看是否可以用更好的方式编写。
  2. 完成这个程序。我被困在试图将列表恢复原状。即列表的嵌套列表。

开始了:

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']
4

2 回答 2

3

您可以使用递归:

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']
于 2013-08-26T02:28:15.760 回答
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 字符串)使用 capitalize 方法,并尝试遍历任何没有它的对象。

于 2013-08-26T02:47:00.693 回答