函数接受字符串的嵌套列表,并返回所有字符串均大写的新嵌套列表?

问题描述 投票:6回答:6

这将把它们大写,但前提是没有嵌套列表。

t = ['this','that', ['other']]

def capitalize_nested(t):
    res = []
    for s in t:
        res.append(s.capitalize())
    return res

print capitalize_nested(t)

我无法弄清楚如何打印出所有字符串以大写字母开头的嵌套列表。我肯定想念一些明显的东西,这让我感到难过。

python function capitalize
6个回答
11
投票

使用递归解决方案(并且使用列表推导也有助于使其更紧凑):

def capitalize_nested(t):
    if isinstance(t, list):
        return [capitalize_nested(s) for s in t]
    else:
        return t.capitalize()

例如:

print capitalize_nested(['this', 'that', ['other']])
# ['This', 'That', ['Other']]

3
投票
def cap(L):
    for i,elem in enumerate(L):
         if isinstance(elem, str):
             L[i] = elem.capitalize()
         elif isinstance(elem, list):
             cap(L[i])

2
投票

只需检查s是否为列表,然后递归调用您的capitalize_nested函数:

t = ['this','that', ['other']]

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(t)

1
投票

这里是一个支持任意深度嵌套列表的版本:

from collections import MutableSequence

def capitalize_inplace(nested_list):
    stack = [nested_list]
    while stack:
        lst = stack.pop()
        for i, item in enumerate(lst):
            if isinstance(item, MutableSequence):
                stack.append(item)
            else:
                lst[i] = item.capitalize()

示例

L = ['this', 'that', ['other'], ['may',['be', ['nested'], 'further']]]
capitalize_inplace(L)
print(L)
# -> ['This', 'That', ['Other'], ['May', ['Be', ['Nested'], 'Further']]]

1
投票

递归解决方案是第一个解决方案,也是最漂亮的解决方案,但并不总是最好的解决方案,也请检查此迭代解决方案:

def capitalize(t):
    lists = [t]
    while lists:
        l = lists.pop()
        for i, item in enumerate(l):
            if isinstance(item, list):
                lists.append(item)
            else:
                l[i] = item.capitalize()

0
投票
def capitalize_nested(string_lists): # capitalize_all is caled map function
final_res = []

for s in string_lists:
    res= capitalize_all(s)  # res is kind of accumalator
    final_res.append(res)

return final_res

capitalize_nested([[“ lambda”,“ gamma”,“ beta”,“ alpha”],[“印度”,“美国”,“加拿大”]]]]

© www.soinside.com 2019 - 2024. All rights reserved.