在 python 2.7 中是否有任何函数或方法可以递归地实现这一点?

Input : ['and', ['or', 'P', '-R', 'P'], ['or', '-Q', '-R', 'P']]
Output : ['and', ['or', 'P', '-R'], ['or', '-Q', '-R', 'P']]

将 sublist1 中的重复“P”删除为重复项
Input : ['and', ['or', 'P', '-R', 'P'], ['or', '-Q', '-R', 'P'], ['or', 'P', '-R', 'P']]
Output : ['and', ['or', 'P', '-R'], ['or', '-Q', '-R', 'P']]

删除 sublist1 中的重复 'P' 作为重复项,并删除 sublist3 作为 sublist1 的重复项

谢谢

最佳答案

我认为您必须创建一个自定义 remove duplicate 函数以保留子列表的顺序。试试这个:

def rem_dup(lis):
    y, s = [], set()
    for t in lis:
        w = tuple(sorted(t)) if isinstance(t, list) else t
        if not w in s:
            y.append(t)
            s.add(w)
    return y

inp = ['and', ['or', 'P', '-R', 'P'], ['or', '-Q', '-R', 'P'], ['or', 'P', '-R', 'P']]

out = [rem_dup(i) if isinstance(i, list) else i for i in rem_dup(inp)]

>>>out
['and', ['or', 'P', '-R'], ['or', '-Q', '-R', 'P']]

关于Python : Remove duplicate elements in lists and sublists; and remove full sublist if duplicate,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29179843/

10-11 20:44