簡體   English   中英

循環遍歷python中的列表和嵌套列表

[英]Looping through list and nested lists in python

我試圖在 Python 中的字符串列表中添加一個前綴。 字符串列表可能包含多級嵌套列表。

有沒有辦法循環遍歷這個列表(及其嵌套列表),同時保持結構?

嵌套的 for 循環很快變得不可讀,而且似乎不是正確的方法。

list = ['a', 'b', ['C', 'C'], 'd', ['E', ['Ee', 'Ee']]]

for i in list:
        if isinstance(i, list):
                for a in i:
                        a = prefix + a
                        #add more layers of for loops
        else:
                i = prefix + i

期望的結果:

prefix = "#"
newlist = ['#a', '#b', ['#C', '#C'], '#d', ['#E', ['#Ee', '#Ee']]]

提前致謝!

你可以寫一個簡單的遞歸函數

def apply_prefix(l, prefix):
    # Base Case
    if isinstance(l, str):
        return prefix + l
    # Recursive Case
    else:
        return [apply_prefix(i, prefix) for i in l]


l = ['a', 'b', ['C', 'C'], 'd', ['E', ['Ee', 'Ee',]]]

print(apply_prefix(l, "#"))
# ['#a', '#b', ['#C', '#C'], '#d', ['#E', ['#Ee', '#Ee']]]

這將使用遞歸:

a = ['a', 'b', ['C', 'C'], 'd', ['E', ['Ee', 'Ee',]]]


def insert_symbol(structure, symbol='#'):
    if isinstance(structure, list):
        return [insert_symbol(sub_structure) for sub_structure in structure]
    else:
        return symbol + structure

print(insert_symbol(a))

>>> ['#a', '#b', ['#C', '#C'], '#d', ['#E', ['#Ee', '#Ee']]]

可以用這樣的遞歸代碼!,試試看,有問題可以問我

def add_prefix(input_list):
    changed_list = []
    for elem in input_list:
        if isinstance(elem, list):
            elem = add_prefix(elem)
            changed_list.append(elem)
        else:
            elem = "#" + elem
            changed_list.append(elem)
    return changed_list

也許你可以使用一個函數來遞歸地完成它。

list_example = ['a', 'b', ['C', 'C'], 'd', ['E', ['Ee', 'Ee']]]

def add_prefix(p_list, prefix):
    for idx in range(len(p_list)):
        if isinstance(p_list[idx], list):
            p_list[idx] = add_prefix(p_list[idx], prefix)
        else:
            p_list[idx] = prefix + p_list[idx]
    return p_list

add_prefix(list_example, '#')

編輯:我現在看到有人發布了幾乎相同的內容。

順便提一句。 命名列表列表被認為是不好的做法,因為它在 python 中也是一個類型名。 可能會導致不需要的行為

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM