如何生成给定整数列表所有不含相同元素的有序二元组合?
实现方案
Python 最简实现
直接用标准库itertools.permutations即可,该函数原生支持生成可迭代对象指定长度的所有有序排列,天然排除同元素配对,底层为C实现,效率远高于手写循环。
示例代码:
import itertools original_list = [0,1,2,3] # 第二个参数指定取2个元素生成排列 result = list(itertools.permutations(original_list, 2)) # 若需要子元素为列表而非元组,追加转换即可 result = [list(item) for item in result]
输出结果和示例完全一致:[[0,1],[0,2],[0,3],[1,0],[1,2],[1,3],[2,0],[2,1],[2,3],[3,0],[3,1],[3,2]]
通用跨语言实现逻辑
如果不想依赖标准库,或者需要移植到其他语言,用双层循环加判断即可,逻辑非常直观:
original_list = [0,1,2,3] result = [] for a in original_list: for b in original_list: if a != b: result.append([a,b])
效率说明
两种方案的时间复杂度都是O(n²),这是该需求的理论下限——最终要生成的结果总数就是n*(n-1)个,没有更低复杂度的实现空间。如果原列表很长不需要一次性存所有结果,Python环境下可以直接用itertools.permutations返回的迭代器逐个处理,能大幅节省内存占用。
内容的提问来源于stack exchange,提问作者Mezza
相关产品推荐
相关产品推荐

