python - 从数字列表创建模式
问题描述
我有一个列表,其元素范围从 0 到 3。我想创建一个列表模式,这样如果有 0,我不会改变任何值,如果有 1,那么我会改变 0 和1. 如果有 2,我将其值从 0、1 和 2 中改变。这听起来可能令人困惑,但简而言之,我想生成这样的模式:
input_list = [0, 0, 0, 0]
output = [0, 0, 0, 0] # Since input only has 0s we do not permute their values.
input_list = [1,0,0,0]
output = [0,0,0,0], [1,0,0,0] # We can permute the values of the 1 present.
input_list = [1,0,0,1]
output = [0,0,0,0], [1,0,0,0], [0,0,0,1], [1,0,0,1]
在列表包含 2 的情况下,我们将其值从 0-1-2 置换
input_list = [2,0,0,0]
output = [0,0,0,0], [1,0,0,0], [2,0,0,0]
input_list = [1,0,0,2]
output = [0,0,0,0], [1,0,0,0], [0,0,0,1], [1,0,0,1], [0,0,0,2], [1,0,0,2]
如果列表中存在 3,则类似的输出。
我有点不确定,我应该如何解决这个问题。任何帮助都会很棒。
PS这不是一个家庭作业问题。我只是在做一个研究项目,需要一个类似的模式来进行一些模拟。复杂性不是问题,但有利于低复杂性的解决方案。:D
解决方案
from itertools import product
input_list = [1,0,0,2]
list( product(*(range(x+1) for x in input_list)) )
输出:
[(0, 0, 0, 0),
(0, 0, 0, 1),
(0, 0, 0, 2),
(1, 0, 0, 0),
(1, 0, 0, 1),
(1, 0, 0, 2)]
推荐阅读
- angular - 为什么 WebPack 被称为捆绑器?捆绑有什么用?
- pandas - 使用 Pandas 订购的最贵商品的数量是多少
- android - 如何在 Kotlin 中正确使用字符串属性?
- scala - 按名称激活惰性变量
- c - C程序高4字节的指针地址异常
- python - 在 Python 中从 IMAP lib 读取电子邮件时如何处理所有字符集和内容类型
- python - 是否可以使用变量然后重新定义它?
- javascript - 仍然出现错误已被 CORS 策略阻止
- amazon-dynamodb - 在 DynamoDb 中创建或读取项目
- laravel - Laravel 条件 Where 子句不起作用