【问题标题】:Python lists combinationPython 列表组合
【发布时间】:2019-08-08 13:46:07
【问题描述】:

我有多个列表:

A=[1,2,3,4,5]
B=[6,7]
C=[8,9,10]

列表的数量和每个列表中的元素数量可以变化。

我正在寻找一个变量 ABC,它应该包含一个列表,该列表是所有列表的所有值的组合,从 C 附加到 B 到 A(从右到左附加),如下所示。有什么办法让我得到这个吗?

ABC=[168,169,1610,178,179,1710,268,269,2610,278,279,2710,........,578,579,5710]

【问题讨论】:

    标签: python python-3.x list combinations


    【解决方案1】:

    这是一个变种:

    from itertools import product
    
    ret = [int(f'{a}{b}{c}') for a, b, c in product(A, B, C)]
    

    使用itertools.product


    如果您需要为可变数量的列表设置它,您可以这样做:

    lists = [A, B, C]  # D, E, F, ...]
    ret = [int(''.join(str(item) for item in items)) for items in product(*lists)]
    

    (或者在下面的 cmets 中查看 DSM 的版本)。

    【讨论】:

    • 由于 OP 说列表的数量可能会有所不同,也许像 [int(''.join(map(str, w))) for w in product(*lists)] 这样的变体不会硬编码事实有三个更可取。
    • @DSM 你有道理...将相应更新。谢谢!
    【解决方案2】:

    你也可以这样试试。

    在这里,您可以传递任意数量的整数列表(数字不同)来运行并获取所需的新数字列表。

    import itertools
    
    def get_combined_number(*group):
        return int("".join(str(num) for num in group)) 
    
    def get_numbers(*numbers_list):
        numbers = []
        for group in itertools.product(*numbers_list):
            numbers.append(get_combined_number(*group)) 
    
        return numbers
    
    # Test case 1st
    A=[1,2,3,4,5]
    B=[6,7]
    C=[8,9,10]
    
    numbers = get_numbers(A, B, C)  # Any number of arrays/list can be passed
    print(numbers) # [168, 169, 1610, 178, 179, 1710, 268, 269, 2610, 278, 279, 2710, 368, 369, 3610, 378, 379, 3710, 468, 469, 4610, 478, 479, 4710, 568, 569, 5610, 578, 579, 5710]
    
    # Test case 2nd
    D = [1, 4, 9]
    E = [2, 7, 1729]
    F = [8, 9,11]
    G = [ 45, 92, 4, 12, 67]
    numbers = get_numbers(D, E, F, G)
    print(numbers) # [12845, 12892, 1284, 12812, 12867, 12945, 12992, 1294, 12912, 12967, 121145, 121192, 12114, 121112, 121167, 17845, 17892, 1784, 17812, 17867, 17945, 17992, 1794, 17912, 17967, 171145, 171192, 17114, 171112, 171167, 11729845, 11729892, 1172984, 11729812, 11729867, 11729945, 11729992, 1172994, 11729912, 11729967, 117291145, 117291192, 11729114, 117291112, 117291167, 42845, 42892, 4284, 42812, 42867, 42945, 42992, 4294, 42912, 42967, 421145, 421192, 42114, 421112, 421167, 47845, 47892, 4784, 47812, 47867, 47945, 47992, 4794, 47912, 47967, 471145, 471192, 47114, 471112, 471167, 41729845, 41729892, 4172984, 41729812, 41729867, 41729945, 41729992, 4172994, 41729912, 41729967, 417291145, 417291192, 41729114, 417291112, 417291167, 92845, 92892, 9284, 92812, 92867, 92945, 92992, 9294, 92912, 92967, 921145, 921192, 92114, 921112, 921167, 97845, 97892, 9784, 97812, 97867, 97945, 97992, 9794, 97912, 97967, 971145, 971192, 97114, 971112, 971167, 91729845, 91729892, 9172984, 91729812, 91729867, 91729945, 91729992, 9172994, 91729912, 91729967, 917291145, 917291192, 91729114, 917291112, 917291167]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-06-14
      • 2014-05-23
      • 2017-08-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-11
      相关资源
      最近更新 更多