Tu peux utiliser l'interpreteur python interactif pour dissequer ce que font les operations.
Regarde ca par exemple:
$ python3
Python 3.7.3 (default, Jul 25 2020, 13:03:44)
[GCC 8.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> A = [1,2,3]
>>> B = [6,7,8]
>>> zip (A, B)
<zip object at 0x7f11a229a908>
>>> for i in zip(A, B):
... print (i)
...
(1, 6)
(2, 7)
(3, 8)
>>>
Tu vois, zip, ca prends deux listes en parametre et ca retourne un "zip object" qui est iterable et qui contient en position 1 une pair composer des premieres entrees des deux listes passer en parametre.
>>> [x * 3 for x in A]
[3, 6, 9]
Cette notation cree un tableau avec autant d'element qu'il y a d'entre dans A et ou chaque entre est une entre de A multiplie par 3.
En regardant comme ca, tu peux depiler ce que fait ton expression.