use*_*412 11 python combinations
我想知道是否有任何方法可以n
从数字列表中获取所有长度组合.
例如,如果我的列表是[1, 2, 3, 4]
,我想输出(如果我选择n = 3)
[1, 2, 3]
[1, 2, 4]
[1, 3, 4]
[2, 3, 4]
Run Code Online (Sandbox Code Playgroud)
像[2,1,3]这样的其他排列对我没用.
jlb*_*b83 30
itertools可以做到这一点
import itertools
for comb in itertools.combinations([1, 2, 3, 4], 3):
print comb
Run Code Online (Sandbox Code Playgroud)
输出
(1, 2, 3)
(1, 2, 4)
(1, 3, 4)
(2, 3, 4)
Run Code Online (Sandbox Code Playgroud)
添加递归函数:
def combinations(array, tuple_length, prev_array=[]):
if len(prev_array) == tuple_length:
return [prev_array]
combs = []
for i, val in enumerate(array):
prev_array_extended = prev_array.copy()
prev_array_extended.append(val)
combs += combinations(array[i+1:], tuple_length, prev_array_extended)
return combs
combinations([1, 2, 3, 4], 3)
Run Code Online (Sandbox Code Playgroud)
输出:
[[1, 2, 3],
[1, 2, 4],
[1, 3, 4],
[2, 3, 4]]
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
8344 次 |
最近记录: |