pythonlistpermutationparity

How to check if permutations have same parity?


I am looking for a way to check if 2 permutations (represented by lists) are of the same parity. Note that I am not interested if they are even or odd parity, just the equality.

I am new to Python and my naive solution is given below as a reply. I am looking forward to Python gurus showing me some cool tricks to achieve the same in lesser, more elegant Python code.


Solution

  • A minor variant of the previous answer - copy perm1, and save array lookups.

    def arePermsEqualParity(perm0, perm1):
        """Check if 2 permutations are of equal parity.
    
        Assume that both permutation lists are of equal length
        and have the same elements. No need to check for these
        conditions.
        """
        perm1 = perm1[:] ## copy this list so we don't mutate the original
    
        transCount = 0
        for loc in range(len(perm0) - 1):                         # Do (len - 1) transpositions
            p0 = perm0[loc]
            p1 = perm1[loc]
            if p0 != p1:
                sloc = perm1[loc:].index(p0)+loc          # Find position in perm1
                perm1[loc], perm1[sloc] = p0, p1          # Swap in perm1
                transCount += 1
    
        # Even number of transpositions means equal parity
        if (transCount % 2) == 0:
            return True
        else:
            return False