How to generate (enumerate) 2**N tuples representing all vertices of unit hypercube in N-dimensional hyperspace ?

Paul Rubin http
Wed Jan 4 02:46:00 CET 2006


Heiko Wundram <modelnine at bit-bukket.org> writes:
> def perm(n):
>     rv = []
>     for i in xrange(2L**n):
>         cur = []
>         for j in range(n):
>             cur.append(1-2*(bool(i & (1<<j))))
>         # cur is in reversed order LSB first, but as you seemingly don't
>         # care about order of the returned tuples, this is irrelevant.
>         rv.append(tuple(cur))
>     return rv

def perm(n):
   return [tuple([(1,-1)[(t>>i)%2] for i in xrange(n)])
              for t in xrange(2L**n)]

>>> perm(4)
[(1, 1, 1, 1), (-1, 1, 1, 1), (1, -1, 1, 1), (-1, -1, 1, 1), (1, 1,
-1, 1), (-1, 1, -1, 1), (1, -1, -1, 1), (-1, -1, -1, 1), (1, 1, 1,
-1), (-1, 1, 1, -1), (1, -1, 1, -1), (-1, -1, 1, -1), (1, 1, -1, -1),
(-1, 1, -1, -1), (1, -1, -1, -1), (-1, -1, -1, -1)]
>>>



More information about the Python-list mailing list