def zip_items(
        self, other: cirq.PauliString[TKey]
    ) -> Iterator[tuple[TKey, 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 `(qubit, (pauli_in_self, pauli_in_other))`.

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

        Returns:
            A sequence of `(qubit, (pauli_in_self, pauli_in_other))` tuples for every `qubit`
            that has a `cirq.Pauli` operation acting on it in both `self` and `other.
        """
        for qubit, pauli0 in self.items():
            if qubit in other:
                yield qubit, (pauli0, other[qubit])
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 `(qubit, (pauli_in_self, pauli_in_other))`.

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

        Returns:
            A sequence of `(qubit, (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