如何在python中获取长度为n的所有组合

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)


Roy*_*oyR 5

添加递归函数:

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)