6

これはそれらを大文字にしますが、ネストされたリストがない場合に限ります。

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

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

print capitalize_nested(t)

すべての文字列が大文字で始まるネストされたリストを印刷する方法がわかりません。私は明白な何かを見逃しているに違いありません、これは私を困惑させています。

4

5 に答える 5

12

再帰的なソリューションを使用します (また、リスト内包表記を使用すると、よりコンパクトになります):

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']]
于 2012-12-24T17:57:45.280 に答える
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])
于 2012-12-24T17:58:53.950 に答える
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)
于 2012-12-24T17:58:52.130 に答える
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()
于 2012-12-24T18:30:13.167 に答える
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']]]
于 2012-12-24T18:31:46.143 に答える