【问题标题】:How to create lists of combinations如何创建组合列表
【发布时间】:2017-06-01 09:19:29
【问题描述】:

here 所述,我已经使用列表中的元素生成了所有可能的组合。现在,我想知道如何将每个组合保存为列表。 我得到这个输出:

[('A',),
 ('B',),
 ('A','B')
  ......]

我会得到这样的东西:

[['A'],['B'],['AB'], ...... ]

有没有简单的实现方法?

【问题讨论】:

    标签: python string list


    【解决方案1】:

    你可以像这样使用map

    combinations = [('A',),
                    ('B',),
                    ('A','B')]
    
    combinations_list = map(list, combinations)
    

    这将返回 generator (Python3) 或 list (Python2)。如果您想要 list,只需将其投射到列表中:

    combinations_list = list(map(list, combinations))
    

    这会将内部元组结构转换为列表:

    [("A"), ("B"), ("A", "B")] -> [["A"], ["B"], ["A", "B"]]
    

    如果你还想展平元组得到以下结果:

    [("A"), ("B"), ("A", "B")] -> [["A"], ["B"], ["AB"]]
    

    您应该为此更改map 的第一个参数:

    lambda sub_tuple: ["".join(sub_tuple)]
    

    【讨论】:

      【解决方案2】:

      如果你说你有一个元组列表,并且你想要一个列表列表,你可以使用转换它

      list_of_lists = [list(t) for t in list_of_tuples]
      

      或者你可以使用map

      在 Python 2 中:

      list_of_lists = map(list, list_of_tuples)
      

      在 Python 3 中:

      list_of_lists = list(map(list, list_of_tuples))
      

      【讨论】:

        【解决方案3】:

        按照 OP 链接的example

        from itertools import combinations
        lis = ['A', 'B', 'C', 'D']
        result = []
        for i in range(1, len(lis)+1):  
        
            result+=[''.join(c) for c in combinations(lis, i)]
        
        print(result)
        

        给了

        ['A', 'B', 'C', 'D', 'AB', 'AC', 'AD', 'BC', 'BD', 'CD', 'ABC', 'ABD', 'ACD', 'BCD', 'ABCD']
        

        编辑

        同单行:

        result = [''.join(c) for i in range(1,len(lis)+1) for c in combinations(lis,i)]
        

        【讨论】:

          【解决方案4】:

          您可以使用str.join 的列表推导:

          >>> combinations = [('A',), ('B',), ('A','B')]
          >>> [[''.join(comb)] for comb in combinations]
          [['A'], ['B'], ['AB']]
          

          您也可以使用生成器表达式来代替列表理解:

          >>> combs_as_lists = ([''.join(comb)] for comb in combinations)
          >>> for comb in combs_as_lists:
          ...     print(comb)
          ['A']
          ['B']
          ['AB']
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2017-01-17
            • 1970-01-01
            • 2014-01-24
            • 2012-07-11
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多