def zip_paulis(
        self, other: cirq.PauliString
    ) -> Iterator[tuple[pauli_gates.Pauli, pauli_gates.Pauli]]:
        """Combines pauli operations from pauli strings in a qubit-by-qubit fashion.

        For every qubit that has a `cirq.Pauli` operation acting on it in both `self` and `other`,
        the method yields a tuple corresponding to `(pauli_in_self, pauli_in_other)`.

        Args:
            other: The other `cirq.PauliString` to zip pauli operations with.

        Returns:
            A sequence of `(pauli_in_self, pauli_in_other)` tuples for every `qubit`
            that has a `cirq.Pauli` operation acting on it in both `self` and `other.
        """
        return (paulis for qubit, paulis in self.zip_items(other))
Combines pauli operations from pauli strings in a qubit-by-qubit fashion.

        For every qubit that has a `cirq.Pauli` operation acting on it in both `self` and `other`,
        the method yields a tuple corresponding to `(pauli_in_self, pauli_in_other)`.

        Args:
            other: The other `cirq.PauliString` to zip pauli operations with.

        Returns:
            A sequence of `(pauli_in_self, pauli_in_other)` tuples for every `qubit`
            that has a `cirq.Pauli` operation acting on it in both `self` and `other.
        
cirq-core/cirq/ops/pauli_string.py