5

のリストがあるとします。

1,1

+ または - 記号を使用できます。したがって、可能な組み合わせは 2 の 2 乗になります。

 1  1
 1 -1
-1  1
-1 -1

同様に、私はのリストを持っています

1,1,1

+ または - 記号を使用できます。したがって、可能な組み合わせは 2 の 3 乗になります。

-1   1  -1
-1   1   1
 1   1   1
 1  -1   1
-1  -1  -1
 1   1  -1
 1  -1  -1
-1  -1   1

Pythonでは、itertoolsまたはその他の方法を使用してそれを行うにはどうすればよいですか. 助けてください。

4

3 に答える 3

1

できるよ:

from itertools import combinations
size = 3
ans = list(set(combinations([-1,1]*size,size)))
#[(1, 1, -1),
# (-1, 1, 1),
# (-1, -1, 1),
# (1, -1, -1),
# (1, -1, 1),
# (-1, 1, -1),
# (1, 1, 1),
# (-1, -1, -1)]

このアプローチでも、 と同じ結果が得られpermutationsます。

于 2013-06-11T07:00:21.717 に答える
0

インポートなしのソリューションを試してみたかった:

list_input = [1,1,1,1,1]
permutations = 2**len(list_input)
for p in range(permutations):
    if p: # if not first iteration
        mod = 1
        for k, v in enumerate(list_input):
            mod = mod/2.0 # needs to use modulus in steps
            if not p % (permutations * mod):
                list_input[k] *= -1
    print(list_input)

出力:

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

なんて面白い。

于 2013-06-11T08:23:48.393 に答える