如何生成包含固定锚元素且无重复的字符串列表组合?
生成包含固定锚元素的唯一值组合方案
核心逻辑是先拆分锚元素与其他元素,对其他元素按值去重后再生成组合,最终每个组合拼接锚元素即可。
示例实现代码如下:
import itertools x = ['foo', 'bar', 'alpha'] anchor = 'foo' result = [] # 先校验锚元素是否存在于输入列表 if anchor in x: # 提取除锚元素外的其他元素,按值去重,保留首次出现顺序 seen = set() rest_elements = [] for item in x: if item != anchor and item not in seen: seen.add(item) rest_elements.append(item) # 生成所有长度的组合,拼接锚元素后存入结果 for length in range(len(rest_elements) + 1): for combo in itertools.combinations(rest_elements, length): result.append([anchor] + list(combo)) print(result)
输出结果和要求的完全一致:
[ ['foo'], ['foo', 'bar'], ['foo', 'alpha'], ['foo', 'bar', 'alpha'] ]
原问题说明
你之前使用itertools.combinations/itertools.permutations遇到的重复问题,是因为这两个方法默认按元素索引区分不同元素,哪怕元素值完全相同也会被判定为不同项。提前对非锚元素做值去重后,就可以实现完全基于元素值生成唯一组合的需求,即使原输入列表存在重复值也不会生成重复的结果项。
内容的提问来源于stack exchange,提问作者user330612
相关产品推荐
相关产品推荐

