【问题标题】:possible all combinations of list of length n in python without itertools [duplicate]没有itertools的python中长度为n的列表的所有组合都可能[重复]
【发布时间】:2017-12-05 04:58:47
【问题描述】:

如何在 python 中获得长度为 n 的列表的所有可能组合我已经为字符串编写了一个代码,但是列表我无法做到,谁能帮助我。

def combo(w, l):
    lst = []
    for i in range(len(w)):
        if l == 1:
            lst.append(w[i])
        for c in combo(w[i+1:], l-1):
            lst.append(w[i] + c)
    return lst

comb=map(list,combo('12345',3))

上面的代码是为了得到它给出正确输出的字符串组合:

['12', '13', '14', '15', '23', '24', '25', '34', '35', '45']

【问题讨论】:

    标签: python python-3.x python-2.7


    【解决方案1】:

    你在找这个吗:

    import itertools
    
    
    def combinations(list_1):
        split_list=[item for item in list_1[0]]
        return [''.join(sub_item) for sub_item in itertools.combinations(split_list,r=2)]
    
    print(combinations(['12345']))
    

    输出:

    ['12', '13', '14', '15', '23', '24', '25', '34', '35', '45']
    

    【讨论】:

      【解决方案2】:

      当然itertools里面有utils,但是你可以通过如下调整两行来修复你的函数:

      # note the '[]' around w[i] in those lines
      lst.append([w[i]]) 
      # ...
      lst.append([w[i]] + c)
      # ...
      

      字符串是唯一的序列,因为它们的元素(可以说是字符)本身就是字符串,并且可以通过+ 连接。对于大多数其他序列/可迭代类型,您必须清楚地区分序列及其元素。在这种情况下,您想要连接(子)列表,而不是元素。

      【讨论】:

      • 谢谢你解决了
      【解决方案3】:

      你也可以直接使用itertools.combinations

      >>> import itertools
      
      >>> print(["".join(x) for x in itertools.combinations('12345', 2)])
      ['12', '13', '14', '15', '23', '24', '25', '34', '35', '45']
      
      >>> print([list(x) for x in itertools.combinations(['1', '2', '3', '4', '5'], 2)])
      [['1', '2'], ['1', '3'], ['1', '4'], ['1', '5'], ['2', '3'], ['2', '4'], ['2', '5'], ['3', '4'], ['3', '5'], ['4', '5']]
      
      >>> print(["".join(x) for x in itertools.combinations(['1', '2', '3', '4', '5'], 2)])
      ['12', '13', '14', '15', '23', '24', '25', '34', '35', '45']
      

      【讨论】:

      • 如果他想组合列表元素print(["".join(x) for x in itertools.combinations(['1', '2', '3', '4', '5'], 2)])并期望o/p为['12', '13', '14', '15', '23', '24', '25', '34', '35', '45'],可以添加这个
      • @Manjunath 添加。
      • 感谢您添加此内容。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多