我只想从集合列表中选择那些集合,这些集合是另一个集合的子集,因此本质上:
sets = [{1, 2, 3}, {6, 7, 8}]
s = {1, 2, 3, 4, 5, 6, 7}
list(compress(sets, [sub <= s for sub in sets]))
这行得通,但首先评估列表理解然后再使用压缩感觉是错误的。有没有办法直接索引集合,比如:
sets[[sub <= s for sub in sets]] ### This does not work!
请您参考如下方法:
试试这个:
[i for i in sets if all(j in s for j in i)]
测试:
In [226]: sets = [{1, 2, 3}, {6, 7, 8}, {1,2}, {3}, {7,1}, {7,8}, {8}]
In [227]: s = {1, 2, 3, 4, 5, 6, 7}
In [228]: [i for i in sets if all(j in s for j in i)]
Out[228]: [{1, 2, 3}, {1, 2}, {3}, {1, 7}]
