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

Python如何简洁生成单值列表所有不重复排列(真值表场景)

需求说明

需要基于Python实现真值表场景下的取值列表生成功能:

  • 给定固定取值集合(例如布尔场景下的[0, 1]),当输入个数为指定值n时,生成长度为n的所有取值组合元组列表
  • 例如取值集合为[0,1]、输入个数为2时,需要输出[(0, 0), (0, 1), (1, 0), (1, 1)]
  • 功能需满足两个要求:
    • 覆盖所有符合规则的取值组合
    • 返回列表中不存在重复项
现有冗余实现

目前的实现逻辑绕路,代码如下:

from itertools import permutations

number_of_inputs = 3
set_of_values = [0, 1]
list_of_permutations = list(dict.fromkeys(list(permutations(set_of_values  * number_of_inputs, number_of_inputs))))

该方案先把取值集合复制n倍,再做全排列,最后通过字典去重,存在不必要的性能开销,需要找更简洁的实现,最好能通过单行函数调用直接完成需求。

优化方案

直接使用标准库itertools中的product函数即可,该函数原生用于计算可重复的笛卡尔积,完全匹配真值表组合的生成场景,天然无重复、全覆盖,不需要额外的去重操作,性能远高于原方案。

实现代码:

from itertools import product

number_of_inputs = 3
set_of_values = [0, 1]
list_of_combinations = list(product(set_of_values, repeat=number_of_inputs))

代码说明:

  • 传入repeat=number_of_inputs参数,即可指定生成元组的长度为输入个数
  • 当输入个数为2、取值集合为[0,1]时,返回结果正好是[(0, 0), (0, 1), (1, 0), (1, 1)],完全符合预期
  • 不需要做额外的去重、类型转换操作,单行核心调用即可完成需求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 19:27:20