如果列表也存在于另一个列表中的列表,您如何找到或仅保留列表的sublist?
lsta = [['a','b','c'],['c','d','e'],['e','f','g']]
lstb = [['a','b','c'],['d','d','e'],['e','f','g']]
我想做诸如Set(LSTA)&设置(LSTB)
Desired_List = [['a','b','c'],['e','f','g']]
我想做类似设置的原因是为了速度,因为我在效率非常重要的大列表中这样做。
另外,有点无关,如果我想从LSTA中减去LSTB,该怎么办
Desired_List2 = [['d','d','e']]
最好将列表列表更改为元组列表,然后您可以轻松地使用集合操作:
>>> tupa = map(tuple, lsta)
>>> tupb = map(tuple, lstb)
>>> set(tupa).intersection(tupb)
set([('a', 'b', 'c'), ('e', 'f', 'g')])
>>> set(tupa).difference(tupb)
set([('c', 'd', 'e')])
如果您的子名单需要保留列表,请使用列表理解
交叉点:
>>> [i for i in lsta if i in lstb]
[['a', 'b', 'c'], ['e', 'f', 'g']]
减法:
>>> [i for i in lsta if i not in lstb]
[['c', 'd', 'e']]
我前一段时间写了一个C模块:
>>> lsta = [['a','b','c'],['c','d','e'],['e','f','g']]
>>> lstb = [['a','b','c'],['d','d','e'],['e','f','g']]
>>> list(boolmerge.andmerge(lsta, lstb))
>>> import boolmerge
[['a', 'b', 'c'], ['e', 'f', 'g']]
这是O(n)时间,需要对列表进行排序。