これはどうですか: 必要な数の -1、0、および 1 を含む順序付きリストを生成し、その順序のすべての順列を繰り返します。そのようです:
import itertools
def generateLists(n, k):
numberOfZeroes = n - k
for numberOfOnes in range(0, k+1):
numberOfNegativeOnes = k - numberOfOnes
orderedList = [-1] * numberOfNegativeOnes + [0] * numberOfZeroes + [1] * numberOfOnes
for possibleOrderings in itertools.permutations(orderedList):
yield possibleOrderings
for i in generateLists(3, 2):
print i
出力:
(-1, -1, 0)
(-1, 0, -1)
(-1, -1, 0)
(-1, 0, -1)
(0, -1, -1)
(0, -1, -1)
(-1, 0, 1)
(-1, 1, 0)
(0, -1, 1)
(0, 1, -1)
(1, -1, 0)
(1, 0, -1)
(0, 1, 1)
(0, 1, 1)
(1, 0, 1)
(1, 1, 0)
(1, 0, 1)
(1, 1, 0)