python中没有itertools的长度为n的列表的所有组合

时间:2017-12-05 04:58:48

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

如何在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']

3 个答案:

答案 0 :(得分:0)

您也可以使用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']

答案 1 :(得分:0)

你在找这个:

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 :(得分:0)

当然,itertools中有一些工具,但您可以通过调整两行来修复您的功能,如下所示:

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

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