How do we get back to where we started? Well, transposing twice is the same as doing nothing at all, hence zip(*zip(*x)) == x. The conclusion: unzip(x) is the same as zip(*x), just like the article says.

Call a callable object with positional arguments taken from the tuple args,
and keyword arguments taken from the optional dictionary kwargs.
Note that classes are callable, as are instances with a __call__() method.
Deprecated since release 2.3. Instead, use the extended call syntax:
function(*args, **keywords).

Apparently, Guido likes the *-syntax better than apply. I can see why, when you see the *-syntax in action, it's very obvious how it works.

The point here being that, by having easy and relatively quick access to transposition, any problems amenable to solution through matrix manipulation are easier to solve here.

Since matrix manipulation is a key part of linear algebra, that actually includes a whole lot of problems. If you haven't looked into it yet, linear algebra is about as useful for doing calculations with matrices as "regular" algebra is for doing calculations with regular numbers. The only difference is that matrices are arguably a lot more useful in representing real-world situations.

data-centric programming; you'll have lists and tuples, of keywords and values from dictionaries or other sources, and you need expressions to break them apart, operate on them, then tie them together... It's really just re-formatting the data for one operation or another.