基于双列表生成所有排列:支持多对一与空分配
生成满足特定规则的元素分配组合
需求说明:
- 现有两个列表:
names(名称列表)和numbers(数字列表) - 需要生成所有可能的分配组合,需满足以下规则:
- 允许多个数字分配给同一个名称
- 允许名称不分配任何数字
- 每个名称对应的数字列表顺序不影响结果(例如
[1,2]与[2,1]视为同一组合)
示例1
当names = ['a', 'b'],numbers = [1, 2]时,所有有效组合如下:
[ {'a': [1], 'b': [2]}, {'a': [2], 'b': [1]}, {'a': [1], 'b': []}, {'a': [2], 'b': []}, {'a': [1, 2], 'b': []}, {'a': [], 'b': [1]}, {'a': [], 'b': [2]}, {'a': [], 'b': [1, 2]}, ]
示例2
当names = ['a', 'b'],numbers = [1,2,3]时,部分有效组合如下(剩余组合可按规则类推):
[ {'a': [], 'b': []}, {'a': [1], 'b': [2]}, {'a': [1], 'b': [3]}, {'a': [2], 'b': [1]}, {'a': [2], 'b': [3]}, {'a': [3], 'b': [1]}, {'a': [3], 'b': [2]}, {'a': [], 'b': [1]}, {'a': [], 'b': [1, 2]}, {'a': [], 'b': [1, 2, 3]}, {'a': [1], 'b': []}, {'a': [1], 'b': [2, 3]}, {'a': [1, 2], 'b': []}, {'a': [1, 2], 'b': [3]}, {'a': [1, 2, 3], 'b': []}, {'a': [2], 'b': []}, {'a': [2], 'b': [1, 3]}, {'a': [2, 3], 'b': []}, {'a': [2, 3], 'b': [1]}, # 更多组合以此类推 ]
注:已单独创建问题讨论列表顺序有影响的场景。
内容的提问来源于stack exchange,提问作者Seminko
相关产品推荐
相关产品推荐

