Je n’ai pas été en mesure de trouver une bonne solution à ce problème sur le net (probablement parce que switch, position, list et Python sont autant de mots surchargés).
C’est assez simple, j’ai cette liste:
['title', 'email', 'password2', 'password1', 'first_name', 'last_name', 'next', 'newsletter']
Je voudrais changer la position de 'password2'
et 'password1'
- ne connaissant pas leur position exacte, mais simplement qu’ils sont côte à côte et que password2
est en premier.
J’ai accompli cela avec une liste assez longue d’inscriptions, mais je me demandais s’il était possible de proposer quelque chose de plus élégant.
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]
Le swap Python simple ressemble à ceci:
foo[i], foo[j] = foo[j], foo[i]
Maintenant, tout ce que vous avez à faire est d’imaginer ce que i
est, et cela peut facilement être fait avec index
:
i = foo.index("password2")
Compte tenu de vos spécifications, j'utiliserais l'assignation de tranche:
>>> 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 l'assignation de tranche est une "tranche inversée" et pourrait également être orthographié:
L[i:i+2] = reversed(L[i:i+2])
si vous trouvez cela plus lisible, comme beaucoup le feraient.
Comment peut-il être plus long que
tmp = my_list[indexOfPwd2]
my_list[indexOfPwd2] = my_list[indexOfPwd2 + 1]
my_list[indexOfPwd2 + 1] = tmp
C'est juste un simple échange utilisant un stockage temporaire.
for i in range(len(arr)):
if l[-1] > l[i]:
l[-1], l[i] = l[i], l[-1]
break
par conséquent, si le dernier élément est supérieur à l'élément à la position i
, ils sont tous deux échangés.
vous pouvez utiliser par exemple:
>>> test_list = ['title', 'email', 'password2', 'password1', 'first_name',
'last_name', 'next', 'newsletter']
>>> reorder_func = lambda x: x.insert(x.index('password2'), x.pop(x.index('password2')+1))
>>> reorder_func(test_list)
>>> test_list
... ['title', 'email', 'password1', 'password2', 'first_name', 'last_name', 'next', 'newsletter']
Je ne suis pas un expert en python, mais vous pouvez essayer:
i = (1,2)
res = lambda i: (i[1],i[0])
print 'res(1, 2) = {0}'.format(res(1, 2))
ci-dessus donnerait o/p comme:
res(1, 2) = (2,1)
Hou la la! Il existe un moyen beaucoup plus standard (applicable à toutes les langues), simple et plus court!
x = i[2]; i[2] = i[3]; i[3] = x
Simple c'est mieux que complexe
Note: Si vous ne connaissez pas la position:
index = list.index("password1") # = 3 in the given list