组合多个列表以获得给定条件的整数

Combining multiple lists to obtain integers for given condition

假设我有 3 个列表,每个列表的随机数范围为 (0-9)

digit_0 = [0, 1, 2, 3, 5, 8]
digit_1 = [1, 2, 3, 8, 9]
digit_2 = [3, 4, 6, 7]

我想为 3 位数字 ABC 创建所有可能的数字,这样 A 只能从 digit_0 中取值,B 只能从digit_1C 只能来自 digit_2 数组

最简单的解决方案似乎是创建 3 个循环

for A in digit_0:
    for B in digit_1:
        for C in digit_2:

但是,我想知道是否有更有效的解决方案?

使用itertools.product:

from itertools import product

digit_0 = (0, 1, 2, 3, 5, 8)
digit_1 = (1, 2, 3, 8, 9)
digit_2 = (3, 4, 6, 7)

for digits in product(digit_0, digit_1, digit_2):
    print(''.join(map(str, digits)), end=' ')

输出:

013 014 016 017 023 024 026 027 033 034 036 037 083 084 086 087 093 094 096 097 113 114 116 117 

最好将元组放在列表中,而不是给它们起类似的名字:

from itertools import product

digit_choices = [(0, 1, 2, 3, 5, 8), (1, 2, 3, 8, 9), (3, 4, 6, 7)]

for digits in product(*digit_choices):
    print(''.join(map(str, digits)))

这样可以轻松生成任意位数的组合。

使用列表推导,替代 itertools.product:

digit_0 = (0, 1, 2, 3, 5, 8)
digit_1 = (1, 2, 3, 8, 9)
digit_2 = (3, 4, 6, 7)
print([f"{d0}{d1}{d2}" for d0 in digit_0 for d1 in digit_1 for d2 in digit_2])

输出:

['013', '014', '016', ..., '896', '897']