如何用Python生成元素全排列的最大长度为K的分组列表?
解决Python列表的全排列分组问题(子列表最大长度为2)
你需要的是对原列表的所有元素排列进行分组,要求子列表的最大长度为2对吧?确实permutations函数是很好的起点,只要再加上一步分割逻辑就能得到你想要的结果。
实现思路
- 先用
permutations生成原列表的所有全排列,这样就能覆盖元素的所有顺序可能性; - 对每个全排列结果,按最大长度2的规则分割成子列表,比如把
(A,B,C)分割为[A,B], [C],把(C,A,B)分割为[C,A], [B]; - 收集所有分割后的分组列表,就是最终的目标结果。
完整代码示例
import itertools # 定义原列表和最大分组长度 a = ['A', 'B', 'C'] max_group_len = 2 # 生成所有符合要求的分组列表 final_result = [] # 遍历所有元素的全排列 for perm in itertools.permutations(a): # 按最大长度分割当前排列 grouped_list = [list(perm[i:i+max_group_len]) for i in range(0, len(perm), max_group_len)] final_result.append(grouped_list) # 打印结果 for group in final_result: print(group)
输出结果
运行代码后会得到你期望的所有分组:
[['A', 'B'], ['C']] [['A', 'C'], ['B']] [['B', 'A'], ['C']] [['B', 'C'], ['A']] [['C', 'A'], ['B']] [['C', 'B'], ['A']]
补充说明
如果你的原列表长度N更大(比如N=4),这个逻辑也同样适用——permutations会生成所有4元素的排列,然后分割成最多2个元素的子列表(比如(A,B,C,D)会被分割为[A,B], [C,D]),完全满足你的需求。
内容的提问来源于stack exchange,提问作者LMB
相关产品推荐
相关产品推荐

