我有如下列表:
myList1
[[1, 7, 0],
[0, 7, 1],
[3, 2],
[2, 9, 3],
[4],
[6, 10, 11, 5],
[5, 10, 11, 12, 6],
[0, 1, 7],
[14, 15, 8],
[3, 16, 9],
[5, 6, 11, 10],
[5, 6, 10, 12, 11],
[6, 11, 12],
[18, 19, 20, 13],
[8, 15, 14],
[8, 14, 15],
[9, 25, 16],
[18, 26, 27, 17],
[13, 17, 19, 26, 27, 28, 18],
[13, 18, 20, 27, 28, 29, 19],
[13, 19, 28, 29, 20],
[30, 21],
[23, 30, 31, 32, 22],
[22, 24, 31, 32, 33, 23],
[23, 32, 33, 34, 24],
[16, 36, 37, 25],
[17, 18, 27, 41, 26],
[17, 18, 19, 26, 28, 41, 42, 27],
[18, 19, 20, 27, 29, 41, 42, 28],
[19, 20, 28, 42, 29]]
我想保留包含所有重复值的最长列表
比如我有
[3, 2]
[2, 9, 3]
我想保留[2, 9, 3]
例如,我有:
[6, 10, 11, 5]
[5, 10, 11, 12, 6]
我只想保留[5, 10, 11, 12, 6]
如果我们有
[17, 18, 27, 41, 26]
[17, 18, 19, 26, 28, 41, 42, 27]
[18, 19, 20, 27, 29, 41, 42, 28]
我们应该只有
[17,18, 19, 20, 26, 27, 29, 28, 41, 42]
这就是我所尝试的
def getMaxList(L)
maxl = dict()
for vl in L:
for v in vl:
maxl[v] = max((maxl.get(v,[]),vl),key=len) # {value:longest list}
return [sl for sl in L if sl in map(maxl.get,sl)]
getMaxList(myList1)
[[1, 7, 0],
[2, 9, 3],
[4],
[5, 10, 11, 12, 6],
[14, 15, 8],
[13, 17, 19, 26, 27, 28, 18],
[30, 21],
[23, 30, 31, 32, 22],
[22, 24, 31, 32, 33, 23],
[23, 32, 33, 34, 24],
[16, 36, 37, 25],
[17, 18, 19, 26, 28, 41, 42, 27],
[18, 19, 20, 27, 29, 41, 42, 28]]
在最新更新之后,您现在似乎只希望从所有列表中获得一组唯一的值:
更新
一种有效的方法是使用树状数据结构。它实际上从已排序的列表项遍历并创建尽可能长的分支
旧的
不过,我对效率表示怀疑。它已经是O(m*n)。但是你可以试试看
相关问题 更多 >
编程相关推荐