Pas besoin de logique compliquée, tout simplement réorganiser la liste de tranchage et de l'étape:
In [1]: l = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
In [2]: l[::2], l[1::2] = l[1::2], l[::2]
In [3]: l
Out[3]: [2, 1, 4, 3, 6, 5, 8, 7, 10, 9]
TLDR;
Édité avec explication
Je crois que la plupart des téléspectateurs sont déjà familiers avec la liste de tranchage et de l'affectation multiple. Dans le cas où vous ne le faites pas, je vais essayer de mon mieux pour expliquer ce qu'il se passe (j'espère ne pas faire pire).
Pour comprendre la liste de découpage, ici, a déjà une excellente réponse et une explication de la liste tranche de notation.
Il suffit de mettre:
a[start:end] # items start through end-1
a[start:] # items start through the rest of the array
a[:end] # items from the beginning through end-1
a[:] # a copy of the whole array
There is also the step value, which can be used with any of the above:
a[start:end:step] # start through not past end, by step
Regardons OP exigences:
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10] # list l
^ ^ ^ ^ ^ ^ ^ ^ ^ ^
0 1 2 3 4 5 6 7 8 9 # respective index of the elements
l[0] l[2] l[4] l[6] l[8] # first tier : start=0, step=2
l[1] l[3] l[5] l[7] l[9] # second tier: start=1, step=2
-----------------------------------------------------------------------
l[1] l[3] l[5] l[7] l[9]
l[0] l[2] l[4] l[6] l[8] # desired output
Premier niveau sera: l[::2] = [1, 3, 5, 7, 9]
Deuxième niveau sera: l[1::2] = [2, 4, 6, 8, 10]
Comme nous voulons ré-affecter first = second
& second = first
, nous pouvons utiliser plusieurs attribution et à la mise à jour de la liste d'origine en place:
first , second = second , first
c'est:
l[::2], l[1::2] = l[1::2], l[::2]
Comme une note de côté, pour obtenir une nouvelle liste, mais n'altérant pas les originaux l
, nous pouvons attribuer une nouvelle liste à partir d' l
, et d'effectuer ci-dessus, c'est:
n = l[:] # assign n as a copy of l (without [:], n still points to l)
n[::2], n[1::2] = n[1::2], n[::2]
J'espère que je ne confondez pas tout de vous avec cet ajout d'explication. Si elle ne vous plaît, aidez-mise à jour de la mine et de faire mieux :-)