【问题标题】:Combining multiple lists to obtain integers for given condition组合多个列表以获得给定条件的整数
【发布时间】:2021-03-21 01:29:06
【问题描述】:

假设我有 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:

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

【问题讨论】:

  • 你有tuple 而不是list

标签: python list loops cartesian-product


【解决方案1】:

使用列表理解,作为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']

【讨论】:

    【解决方案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)))
    

    这将使生成任意位数的组合变得容易。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-12-09
      • 2022-11-21
      • 2021-04-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-09-10
      • 2016-09-15
      相关资源
      最近更新 更多