Python Forum

Full Version: Triplet Combinations of All Values
You're currently viewing a stripped down version of our content. View the full version with proper formatting.
Hello,
I am using a specific library

And I am running this line:
cirq.kron(cirq.unitary(cirq.rz(a)),cirq.unitary(cirq.rz(b)),cirq.unitary(cirq.rz(a)))
And I also have to write this code line with all possible triplet combinations of a and b
Like
        cirq.kron(cirq.unitary(cirq.rz(a)),cirq.unitary(cirq.rz(a)),cirq.unitary(cirq.rz(a)))
        cirq.kron(cirq.unitary(cirq.rz(a)),cirq.unitary(cirq.rz(a)),cirq.unitary(cirq.rz(b)))
        cirq.kron(cirq.unitary(cirq.rz(a)),cirq.unitary(cirq.rz(b)),cirq.unitary(cirq.rz(a)))
        cirq.kron(cirq.unitary(cirq.rz(a)),cirq.unitary(cirq.rz(b)),cirq.unitary(cirq.rz(b)))
        cirq.kron(cirq.unitary(cirq.rz(b)),cirq.unitary(cirq.rz(a)),cirq.unitary(cirq.rz(a)))
        cirq.kron(cirq.unitary(cirq.rz(b)),cirq.unitary(cirq.rz(b)),cirq.unitary(cirq.rz(a)))
        cirq.kron(cirq.unitary(cirq.rz(b)),cirq.unitary(cirq.rz(a)),cirq.unitary(cirq.rz(b)))
        cirq.kron(cirq.unitary(cirq.rz(a)),cirq.unitary(cirq.rz(b)),cirq.unitary(cirq.rz(a)))
        cirq.kron(cirq.unitary(cirq.rz(b)),cirq.unitary(cirq.rz(b)),cirq.unitary(cirq.rz(b)))
[/python]

How can I do that in the simplest way?
Probably you could use itertools.product to generate them.

>>> from itertools import product
>>> list(product("ab", repeat=3))
[('a', 'a', 'a'), ('a', 'a', 'b'), ('a', 'b', 'a'), ('a', 'b', 'b'), ('b', 'a', 'a'), ('b', 'a', 'b'), ('b', 'b', 'a'), ('b', 'b', 'b')]
So something similar to:
for triplet in product((a, b), repeat=3):
    cirq.kron(cirq.unitary(cirq.rz(triplet[0])),cirq.unitary(cirq.rz(triplet[1])),cirq.unitary(cirq.rz(triplet[2])))
(Nov-04-2020, 11:38 PM)bowlofred Wrote: [ -> ]Probably you could use itertools.product to generate them.

>>> from itertools import product
>>> list(product("ab", repeat=3))
[('a', 'a', 'a'), ('a', 'a', 'b'), ('a', 'b', 'a'), ('a', 'b', 'b'), ('b', 'a', 'a'), ('b', 'a', 'b'), ('b', 'b', 'a'), ('b', 'b', 'b')]
So something similar to:
for triplet in product((a, b), repeat=3):
    cirq.kron(cirq.unitary(cirq.rz(triplet[0])),cirq.unitary(cirq.rz(triplet[1])),cirq.unitary(cirq.rz(triplet[2])))
Thank you very much :))