问题描述
是否可以从包含子列表的列表中删除列表?
让我们说从a到e有5个元素。
我发现以下尺寸从0到5的所有组合:
<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/6.1.1/d3.min.js"></script>
现在让我们说我要删除其中一些包含子列表的组合:
all_combinations = [[],['a'],['b'],['c'],['d'],['e'],['a','b'],'c'],'d'],'e'],['b',['c',['d','b','c','d','e']]
是否有一种简单的方法?我应该只剩下不包含这些子列表的组合。我只应该列出a和c不在一起,c和d不在一起,b和e不在一起的列表。
编辑:想得到这样的输出:
sublists = [['a','e']]
解决方法
您可以使用sets来查看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'],'d'],'e'],['b','c'],['c',['d','b','d','e']]
>>> _==valid_combinations
True
,
尝试一下:
result = [item for item in all_combinations if item not in sublists]
,
一种可能的方法是使用集合,尤其是函数issuperset
,以检查列表是否包含另一个列表的所有元素。因此,以下列表推导返回a
的所有元素all_combinations
,其中不包含b
中任何sublists
的每个元素
[a for a in all_combinations if all(not set(a).issuperset(set(b)) for b in sublists)]