迭代嵌套子列表并移除特定项

2024-09-28 03:20:00 发布

您现在位置:Python中文网/ 问答频道 /正文

我是Python的初学者。有人能帮我找出python 2.7中下面代码中的问题是什么吗

我试图递归地遍历列表和子列表,并删除和,或者,不是,IFF,IMPLIES in list

我的方法:

def setOfSets(prop):
    if isinstance(prop, str):
        answer = prop
    else:
        for item in prop:
            if isinstance(item, str):
                if (item == IFF):
                    answer = prop.remove(item)
                if (item == IMPLIES):
                    answer = prop.remove(item)
                if (item == AND):
                    answer = prop.remove(item)
                if (item == OR):
                    answer = prop.remove(item)
                if (item == NOT):
                    answer = prop.remove(item)
            else:
                answer = setOfSets(item)   

    return answer

prop0 = setOfSets(inputList)
print "Set of Sets:"
print prop0

结果:

Input : ['or', 'R', ['not', 'B'], 'W']
Expected output : ['R',['B'],'W']
Current output : None

我认为我犯了一些愚蠢的错误,或者在python中使用了一些错误的东西


Tags: answerin列表ifitemelseremoveisinstance
1条回答
网友
1楼 · 发布于 2024-09-28 03:20:00

与复制旧的嵌套列表并从中删除项相比,构建新列表更简单

下面是一个稍微改进的版本,包含更多的测试用例:

#!/usr/bin/env python

OPNAMES = set(('IFF', 'IMPLIES', 'AND', 'OR', 'NOT'))

def setOfSets(prop):
    answer = []
    for item in prop:
        if isinstance(item, str):
            if item.upper() not in OPNAMES:
                answer.append(item)
        else:
            answer.append(setOfSets(item))

    return answer

def test(prop):
    print prop
    print setOfSets(prop)
    print

props = [
    ['A', 'B', 'C'],
    ['or', 'R', ['not', 'B'], 'W'],
    ['or', 'R', ['not', 'B'], [['IMPLIES', 'Q'], 'W'], 'Z'],
    [['A', 'AND', ['B', 'OR', ['NOT', 'C']], 'IFF', 'D'],'IMPLIES', 'Z'],
]

for prop in props:
    test(prop)

输出

['A', 'B', 'C']
['A', 'B', 'C']

['or', 'R', ['not', 'B'], 'W']
['R', ['B'], 'W']

['or', 'R', ['not', 'B'], [['IMPLIES', 'Q'], 'W'], 'Z']
['R', ['B'], [['Q'], 'W'], 'Z']

[['A', 'AND', ['B', 'OR', ['NOT', 'C']], 'IFF', 'D'], 'IMPLIES', 'Z']
[['A', ['B', ['C']], 'D'], 'Z']

相关问题 更多 >

    热门问题