Python:迭代嵌套列表中的每个项目并替换特定项目

San*_*rni 10 python nested-lists python-2.7

我是python的初学者.我想知道是否有任何内置函数或其他方式,所以我可以在python 2.7中实现以下:

在列表和子列表中查找all -letter并将其替换为['not',letter]

例如:查找下面列表中以 - 开头的所有项目,并将其替换为['not',letter]

Input : ['and', ['or', '-S', 'Q'], ['or', '-S', 'R'], ['or', ['or', '-Q', '-R'], '-S']]
Output : ['and', ['or', ['not','S'], 'Q'], ['or', ['not','S'], 'R'], ['or', ['or', ['not','Q'], ['not','R']], ['not','S']]]
Run Code Online (Sandbox Code Playgroud)

任何人都可以建议如何在python中做到这一点.谢谢

sal*_*ise 9

尝试一下递归:

def change(lol):
    for index,item in enumerate(lol):
        if isinstance(item, list):
            change(item)
        elif item.startswith('-'):
            lol[index] = ['not',item.split('-')[1]]
    return lol
Run Code Online (Sandbox Code Playgroud)

在行动:

In [24]: change(['and', ['or', '-S', 'Q'], ['or', '-S', 'R'], ['or', ['or', '-Q', '-R'], '-S']])
Out[24]:
['and',
['or', ['not', 'S'], 'Q'],
['or', ['not', 'S'], 'R'],
['or', ['or', ['not', 'Q'], ['not', 'R']], ['not', 'S']]]
Run Code Online (Sandbox Code Playgroud)