You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python实现从短列表生成指定长度的可重复排列组合

解决方案:生成指定长度的可重复有序组合

你要的其实是输入列表与自身进行n次笛卡尔积(n为指定长度),Python标准库中的itertools.product是最高效的实现方式,完全能解决超时问题——因为它是基于C底层实现的,比纯Python递归/循环快几个数量级。

直接使用itertools.product

代码示例:

import itertools

def generate_repeatable_permutations(input_list, length):
    # product返回元组迭代器,转成列表即可
    return [list(item) for item in itertools.product(input_list, repeat=length)]

# 测试示例
input_list = [1, 2]
target_length = 3
result = generate_repeatable_permutations(input_list, target_length)
print(result)

输出结果完全符合你的期望:
[[1, 1, 1], [1, 1, 2], [1, 2, 1], [1, 2, 2], [2, 1, 1], [2, 1, 2], [2, 2, 1], [2, 2, 2]]

为什么之前的方法会超时?

如果你之前用的是纯Python实现的递归、嵌套循环或者手动拼接组合,这类方法在列表元素多、目标长度大时,会因为Python解释器的额外开销导致速度急剧下降。而itertools.product直接调用C级别的循环,避免了这些冗余操作,性能提升非常明显。

手动实现(仅作参考,不推荐用于性能敏感场景)

如果因为某些限制不能使用itertools,可以用递归优化实现,但效率远不如标准库:

def generate_repeatable_permutations(input_list, length):
    if length == 0:
        return [[]]
    prev_result = generate_repeatable_permutations(input_list, length - 1)
    return [item + [num] for item in prev_result for num in input_list]

# 测试
input_list = [1,2]
print(generate_repeatable_permutations(input_list, 3))

内容的提问来源于stack exchange,提问作者Sherif Emad

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 03:01:13