itertools.product通常,您可以使用笛卡尔积。具体来说,我将分两个步骤实施您的算法:
- 将输入字符串(例如
"1 0^ 1* 0^ 1"
)解析为整数列表;和 - 产生清单清单的产品。
一个相对简单的基于生成器的实现,带有一个帮助函数,为了清楚起见,它看起来像:
def algorithm(input_): # Step 1 instructions = [] for s in input_.split(): try: instructions.append([int(s)]) except ValueError: instructions.append(list(values(s))) # Step 2 for prod in itertools.product(*instructions): yield proddef values(s): RULES = {'*': 4, '^': 2} n = int(s[:-1]) for x in range(RULES[s[-1]]): yield n + x例如:
>>> print("n".join(" ".join(map(str, t)) for t in algorithm("1 0^ 1* 1")))1 0 1 11 0 2 11 0 3 11 0 4 11 1 1 11 1 2 11 1 3 11 1 4 1您将不得不修改它以获得所需的精确顺序(您似乎拥有一个运算符,而不是从左至右的优先级)和格式(例如,组之间的空格)。



