假设我有一个
列表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或任何其他方法来做到这一点。请帮忙。
答案 0 :(得分:10)
>>> import itertools
>>> lst = [1,1,1]
>>> for xs in itertools.product([1,-1], repeat=len(lst)):
... print([a*b for a,b in zip(lst, xs)])
...
[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)
你可以这样做:
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
得出相同的结果。
答案 2 :(得分: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]
多么有趣。