Python:在列表中获取唯一项和子列表

时间:2015-03-22 22:04:15

标签: python python-2.7

我想在python 2.7

的列表中找到一个唯一项和子列表的列表
Input : [['P', 'Q'], [['not', 'P'], 'R'], [['not', 'R'], ['not', 'P']], [['not', 'Q'], 'S', ['not', 'T']], 'T']

Output: ['P','Q',['not','P'],'R',['not','R'],['not','Q'],'S',['not','T'],'T']

任何人都可以建议如何递归吗?

我的代码:

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

def removeDuplicates(prop):
    if isinstance(prop, str):
        return prop
    else:
        out = [rem_dup(i) if isinstance(i, list) else i for i in rem_dup(prop)]
        return out 

我从main方法调用removeDuplicates并传递输入。我得到以下异常:

   if not w in s:
   TypeError: unhashable type: 'list'

1 个答案:

答案 0 :(得分:1)

递归解决方案:

def unique(lst):
    s = set()
    for el in lst:
        if isinstance(el, str):
            s.add(el)
        elif el[0] == 'not'
            s.add(tuple(*el))
        else:
            s.update(unique(el))

    return s