En Python, comment obtenir toutes les combinaisons de n
valeurs binaires 0
et 1
?
Par exemple, si n = 3
, Je veux avoir
[ [0,0,0], [0,0,1], [0,1,0], [0,1,1], ... [1,1,1] ] #total 2^3 combinations
Comment puis-je faire ceci?
Utilisation itertools.product
import itertools
lst = list(itertools.product([0, 1], repeat=3))
Cela produira une liste de tuples (voir ici )
Vous pouvez facilement changer cela pour utiliser une variable repeat
:
n = 3
lst = list(itertools.product([0, 1], repeat=n))
Si vous avez besoin d'une liste de listes, vous pouvez utiliser la fonction map
(merci @Aesthete).
lst = map(list, itertools.product([0, 1], repeat=n))
Ou en Python 3:
lst = list(map(list, itertools.product([0, 1], repeat=n)))
# OR
lst = [list(i) for i in itertools.product([0, 1], repeat=n)]
Notez que l'utilisation de map
ou d'une compréhension de liste signifie que vous n'avez pas besoin de convertir le produit en liste, car il parcourra le itertools.product
objet et produire une liste.
Sans utiliser de fonctions intégrées ou de techniques intelligentes, nous pouvons obtenir comme ça
def per(n):
for i in range(1<<n):
s=bin(i)[2:]
s='0'*(n-len(s))+s
print map(int,list(s))
per(3)
production
[0, 0, 0]
[0, 0, 1]
[0, 1, 0]
[0, 1, 1]
[1, 0, 0]
[1, 0, 1]
[1, 1, 0]
[1, 1, 1]
Ce qui suit vous donnera toutes ces combinaisons
bin = [0,1]
[ (x,y,z) for x in bin for y in bin for z in bin ]