删除包含升华的列表



有没有办法从包含子列表的列表中删除列表?

假设我有从a到e的5个元素。

我在下面找到了从0号到5号的所有组合:

all_combinations = [[], ['a'], ['b'], ['c'], ['d'], ['e'], ['a', 'b'], ['a', 'c'], ['a', 'd'], ['a', 
'e'], ['b', 'c'], ['b', 'd'], ['b', 'e'], ['c', 'd'], ['c', 'e'], ['d', 'e'], 
['a', 'b', 'c'], ['a', 'b', 'd'], ['a', 'b', 'e'], ['a', 'c', 'd'], ['a', 'c',
'e'], ['a', 'd', 'e'], ['b', 'c', 'd'], ['b', 'c', 'e'], ['b', 'd', 'e'],                
['c', 'd', 'e'], ['a', 'b', 'c', 'd'], ['a', 'b', 'c', 'e'], ['a', 'b', 
'd', 'e'], ['a', 'c', 'd', 'e'], ['b', 'c', 'd', 'e'], ['a', 'b', 'c', 'd', 'e']]

现在假设我想删除一些包含子列表的组合:

sublists = [['a', 'c'], ['c', 'd'], ['b', 'e']]

有简单的方法吗?我应该只剩下不包含这些子列表的组合。我应该只得到a和c不在一起、c和d不在一起以及b和e不在一起的列表。

编辑:想要得到这样的输出:

valid_combinations = [[], ['a'], ['b'], ['c'], ['d'], ['e'], ['a', 'b'], 
['a', 'd'], ['a', 'e'], ['b', 'c'], ['b', 'd'],
['c', 'e'], ['d', 'e'], ['a', 'b', 'd'], 
['a', 'd', 'e']]


您可以使用集合查看sublists中项目的完整列表是否包含在all_combinations:的子列表中

>>> [sl for sl in all_combinations if not any(set(e)<=set(sl) for e in sublists)]
[[], ['a'], ['b'], ['c'], ['d'], ['e'], ['a', 'b'], ['a', 'd'], ['a', 'e'], ['b', 'c'], ['b', 'd'], ['c', 'e'], ['d', 'e'], ['a', 'b', 'd'], ['a', 'd', 'e']]
>>> _==valid_combinations
True

试试这个:

result = [item for item in all_combinations if item not in sublists] 
一种可能的方法是使用集合,特别是函数issuperset来检查一个列表是否包含另一个列表的所有元素。因此,下面的列表理解返回all_combinations的所有元素a,这些元素不包含sublists中任何b的每个元素
[a for a in all_combinations if all(not set(a).issuperset(set(b)) for b in sublists)]

相关内容

  • 没有找到相关文章

最新更新