在 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 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 中的类型名称。可能会导致不良行为

这将使用递归:

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