web-dev-qa-db-fra.com

Comment obtenir toutes les combinaisons de n valeurs binaires?

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?

32
LWZ

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.

54
Volatility

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]
8
Anil

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 ]
3
MoveFast