如果子列表中元素的顺序does not没关系,你可以使用以下内容:
from collections import Counter
z1 = [[1, 2, 3], [4, 5, 6], [2, 3, 1], [2, 5, 1]]
temp = Counter([tuple(sorted(x)) for x in z1])
z2 = [list(k) for k, v in temp.items() if v == 1]
print(z2) # [[4, 5, 6], [1, 2, 5]]
一些备注:
- 排序生成列表
[1, 2, 3]
and [2, 3, 1]
从示例中相等,因此它们按Counter
- 投射到
tuple
转换为list
s 是可散列的,因此可以用作dictionary
key.
- the
Counter
创建一个dict
与tuple
上面创建的键和值等于它们在原始文件中出现的次数list
- 决赛
list-comprehension
取出所有这些键Counter dictionary
计数为 1。
如果订单does没关系,您可以使用以下内容代替:
z1 = [[1, 2, 3], [4, 5, 6], [2, 3, 1], [2, 5, 1]]
def test(sublist, list_):
for sub in list_:
if all(x in sub for x in sublist):
return False
return True
z2 = [x for i, x in enumerate(z1) if test(x, z1[:i] + z1[i+1:])]
print(z2) # [[4, 5, 6], [2, 5, 1]]