242 votes

Comment passer de la position des deux éléments dans une liste Python?

Je n'ai pas été en mesure de trouver une bonne solution pour ce problème sur le net (probablement à cause de l'interrupteur, la position, la liste et Python sont tous ces surchargé de mots).

C'est plutôt simple, j'ai cette liste:

['title', 'email', 'password2', 'password1', 'first_name', 'last_name', 'next', 'newsletter']

J'aimerais position de l'interrupteur d' 'password2' et 'password1' – de ne pas connaître leur position exacte, mais ils sont juste à côté l'une de l'autre et en password2 est le premier.

J'ai accompli cela avec certains plutôt longue haleine liste-subscripting, mais je me demandais il est possible de venir avec quelque chose d'un peu plus élégante?

450voto

samtregar Points 1577
    i = ['title', 'email', 'password2', 'password1', 'first_name', 
         'last_name', 'next', 'newsletter']
    a, b = i.index('password2'), i.index('password1')
    i[b], i[a] = i[a], i[b]

200voto

Can Berk Güder Points 39887

Le simple Python swap ressemble à ceci:

foo[i], foo[j] = foo[j], foo[i]

Maintenant tout ce que vous devez faire est de déterminer ce qu' i est, et qui peut facilement être fait avec index:

i = foo.index("password2")

18voto

Alex Martelli Points 330805

Compte tenu de vos spécifications techniques, j'aimerais utiliser de la tranche d'affectation:

>>> L = ['title', 'email', 'password2', 'password1', 'first_name', 'last_name', 'next', 'newsletter']
>>> i = L.index('password2')
>>> L[i:i+2] = L[i+1:i-1:-1]
>>> L
['title', 'email', 'password1', 'password2', 'first_name', 'last_name', 'next', 'newsletter']

Le côté droit de la tranche d'affectation est un "inversé tranche" et pourrait également être orthographié:

L[i:i+2] = reversed(L[i:i+2])

si vous trouvez que plus lisible, comme beaucoup.

7voto

unwind Points 181987

Comment peut-il jamais être plus longue que

tmp = my_list[indexOfPwd2]
my_list[indexOfPwd2] = my_list[indexOfPwd2 + 1]
my_list[indexOfPwd2 + 1] = tmp

C'est juste une plaine de swap en utilisant le stockage temporaire.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X