生成整数序列的完整排列

时间:2018-12-02 16:27:09

标签: python

我需要找到一种方法(在python中),以根据给定的x长度产生(+1)和(-1)整数的所有排列。例如,如果x = 1,则应为[(+1),(-1)]; x = 2-> [[[(+ 1)(+ 1)],[(+ 1)(-1)],[(-1)(+ 1)],[(-1)(-1)] ] 等等。

实际上,itertools.product()函数可用于字符串排列。这就是我可以做的:

import itertools
def binary_sequence(k):
    L1 = [''.join(x) for x in itertools.product('+-', repeat=k)]
    L2 = list()
    for i in L1:
        L2.append([i])
    L2 = np.array(L2)
    return (L2) 

但是,之后我找不到将整数分配给字符串的方法。使用itertools或其他工具可以对整数执行此操作吗?

2 个答案:

答案 0 :(得分:2)

如果我正确理解,您可以这样做:

import itertools

import numpy as np


def binary_sequence(k):
    return np.array([x for x in itertools.product([-1, 1], repeat=k)])


for seq in binary_sequence(2):
    print(seq)

输出

[-1 -1]
[-1  1]
[ 1 -1]
[1 1]

product函数从文档中收到一个可迭代项:

  

输入可迭代项的笛卡尔积。

答案 1 :(得分:1)

您真的可以进行字符串排列:

In [338]: list(itertools.product(["-1","+1"],repeat=3))
Out[338]: 
[('-1', '-1', '-1'),
 ('-1', '-1', '+1'),
 ('-1', '+1', '-1'),
 ('-1', '+1', '+1'),
 ('+1', '-1', '-1'),
 ('+1', '-1', '+1'),
 ('+1', '+1', '-1'),
 ('+1', '+1', '+1')]