如何删除一个列表中存在于另一个列表中的元组组合?
实现方案
你要做的是过滤seq2中包含k1指定二元组组合的排列,参考实现代码如下:
from itertools import permutations seq2 = permutations(['p', 'y', 't', 'h', 'o', 'n'], 5) k1 = [('y','h'),('p','o'),('h','n'),('t','p'),('n','o')] # 转换为集合提升查询效率 k1_set = set(k1) k2 = [] for perm in seq2: # 生成当前排列的所有相邻二元组 adjacent_pairs = zip(perm, perm[1:]) # 仅保留不存在k1指定组合的排列 if not any(pair in k1_set for pair in adjacent_pairs): k2.append(perm)
逻辑说明
- 上述代码默认匹配相邻位置的二元组组合,也就是如果
k1里的元组是排列里连续出现的两个元素,就会被排除 - 如果你的需求是只要排列中同时出现
k1元组的两个元素,不管顺序和位置就排除,可以把判断条件替换为:if not any(p[0] in perm and p[1] in perm for p in k1_set):
内容的提问来源于stack exchange,提问作者pred
相关产品推荐
相关产品推荐

