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