组合多个列表以获得给定条件的整数
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_1
和 C
只能来自 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']
假设我有 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_1
和 C
只能来自 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']