在python中跨多个列表删除公共列表元素的最简洁方法

Lit*_*les 6 python list set

我有n个数字列表.我想确保每个列表包含该特定列表的唯一元素.即其余任何一个都没有"共享"重复.
这对于两个列表来说非常容易,但是对于n个列表来说有点棘手.

e.g.   
mylist = [
[1, 2, 3, 4],
[2, 5, 6, 7],
[4, 2, 8, 9]
]
Run Code Online (Sandbox Code Playgroud)

变为:

mylist = [
[1, 3],
[5, 6, 7],
[8, 9]
]
Run Code Online (Sandbox Code Playgroud)

dug*_*res 5

from collections import Counter
from itertools import chain

mylist = [
    [1,2,3,4],
    [2,5,6,7,7],
    [4,2,8,9]
]

counts = Counter(chain(*map(set,mylist)))

[[i for i in sublist if counts[i]==1] for sublist in mylist]
#[[1, 3], [5, 6, 7, 7], [8, 9]]
Run Code Online (Sandbox Code Playgroud)

  • @MatthewRNYC:你不应该害怕使用像这个答案所暗示的基本系列.另外,我看不出`chain`和`Counter`构造函数都不是'O(N)`的原因. (2认同)
  • 但它不会在一个列表中保留重复项. (2认同)