我想在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'
答案 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