Python 范围内元组的置换

Python 范围内元组的置换,python,algorithm,permutation,Python,Algorithm,Permutation,当我调用置换(范围(0,nCols))时,它会给我一个如下的置换: from itertools import permutations for i in range(1,nCols+1): print(list(permutations(range(nCols),i)) (0,1,2) (0, 2, 1) (1, 0, 2) (1, 2, 0) (2, 0, 1) (2,1,0) 但是除了上面的排列之外,我想要的是包含少于ncol项的元组,因此: (0) (1) (2) (0, 1)

当我调用
置换(范围(0,nCols))
时,它会给我一个如下的置换:

from itertools import permutations
for i in range(1,nCols+1):
    print(list(permutations(range(nCols),i))
(0,1,2)
(0, 2, 1)
(1, 0, 2)
(1, 2, 0)
(2, 0, 1)
(2,1,0)

但是除了上面的排列之外,我想要的是包含少于
ncol
项的元组,因此:

(0)
(1)
(2)
(0, 1)
(0, 2)
(1, 2)


这段代码似乎是itertools.permutations的副本,因此我将在这里使用它:

from itertools import permutations

all_permutations = []

for index in range(1, nCols+1):
   all_permutations += permutations(range(nCols), index)

print(all_permutations)

请注意,第二个参数
r
指定要生成的置换的长度。因此,我们可以循环并生成每个长度直到ncol的所有置换。轰

既然您发布了下面模块itertools.permutations中的代码,您应该马上就能看到它。中的“r”参数

def permutations(iterable, r=None):
是排列应具有的长度。您可以在1到n(iterable的长度)的范围内循环,如下所示:

from itertools import permutations
for i in range(1,nCols+1):
    print(list(permutations(range(nCols),i))

这假设您真正指的是排列。在您的示例中,2长度排列不完整。

我不明白您的实际问题是什么。这是一种愚蠢的方式。。。有一个函数--
def perms(iterable):因为i在iterable:permutations(i)
这很好,但它给了我它并没有给我需要的东西。它给了我
[(0,),(1,),(2,),(0,1),(0,2),(1,2),(2,0),(2,1),(0,1,2,1),(1,0,2),(1,2,0),(2,0,1),(2,1,0)]
。(0,)多余的逗号弄乱了我的程序,我想。@nodebase,你不能有一个没有逗号的项目元组