Obtención de todas las posibles combinaciones de bits de tamaño de N bits

David542:

Para probar un sumador completo Estoy combinando todos los posibles 0 o 1 a las entradas de tres maneras (uno para input_a, uno para input_b, y uno para carry_c). Para hacer esto que estoy haciendo:

>>> [(bit1, bit2, bit3) for bit1 in a for bit2 in a for bit3 in a]
[(0, 0, 0), (0, 0, 1), (0, 1, 0), (0, 1, 1), (1, 0, 0), (1, 0, 1), (1, 1, 0), (1, 1, 1)]

Esto funciona bien, pero mis dos pensamientos sobre esto son:

  • ¿Hay una manera más Pythonic para hacer esto. Algo así como una construida en combinations([0,1], 3)?
  • Habría una manera de abstraerse de la lista-comprensión de modo que por ejemplo lo que podía hacer 20 posibilidades sin tener que escribir 20 veces?

He mirado un poco al itertoolspero parece que el uso que para el caso anterior requiere casi tanto código (si no más) que la lista anterior comprensión.

iz_:

Se puede utilizar producta partir deitertools (producto cartesiano):

from itertools import product

print(list(product([0, 1], repeat=3)))

Salida:

[(0, 0, 0), (0, 0, 1), (0, 1, 0), (0, 1, 1), (1, 0, 0), (1, 0, 1), (1, 1, 0), (1, 1, 1)]

Para cambiar el número de elementos que hay por cada tupla, se puede alterar el repeatargumento.

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=365145&siteId=1
Recomendado
Clasificación