Python如何不改变列表A顺序最多替换3处元素为B的值生成所有结果
实现思路
- 按替换位置的数量分4种场景处理:替换0个位置(原列表本身)、替换1个位置、替换2个位置、替换3个位置,完全覆盖「最多3个位置」的要求
- 用组合工具筛选A中要替换的位置,避免重复选择同一个位置,也不会打乱A的原有顺序
- 对每一组选中的替换位置,使用可重复的笛卡尔积生成B元素的取值组合,支持同一B元素在不同位置重复使用
- 每次操作都基于A的副本修改,不会改动原A的元素和顺序,生成的结果转元组后存入C即可
可运行代码
import itertools A = [1,2,3,4,5,6,7] B = ['a','b','c','d','e','f','g','h','i','j','k','l'] C = [] # 加入替换0个位置的原列表结果 C.append(tuple(A)) # 遍历替换1、2、3个位置的场景 for replace_count in range(1, 4): # 生成所有replace_count个不同索引的组合 for index_group in itertools.combinations(range(len(A)), replace_count): # 生成对应数量的B元素可重复取值组合 for value_group in itertools.product(B, repeat=replace_count): # 基于原A生成副本修改,不改动原A temp_list = A.copy() for idx, val in zip(index_group, value_group): temp_list[idx] = val C.append(tuple(temp_list)) # 可打印前10条结果验证匹配度 print(C[:10])
内容的提问来源于stack exchange,提问作者shivam
相关产品推荐
相关产品推荐

