93 votes

Syntaxe simple pour mettre un élément de liste au premier plan en python ?

J'ai un tableau avec un ensemble d'éléments. Je voudrais mettre un élément donné au premier plan, mais sinon laisser la commande inchangée. Les gens ont-ils des suggestions quant à la syntaxe la plus propre pour cela ?

C'est le mieux que j'ai pu trouver, mais il semble que ce soit une mauvaise forme d'avoir une opération N log N alors qu'une opération N pourrait le faire.

    mylist = sorted(mylist,
                    key=lambda x: x == targetvalue,
                    reverse=True)

Cheers, /YGA

176voto

Mike Hordecki Points 14757

J'irais avec :

mylist.insert(0, mylist.pop(mylist.index(targetvalue)))

44voto

Alex Martelli Points 330805

Pour amener (par exemple) le 6ème élément au premier plan, utilisez :

mylist.insert(0, mylist.pop(5))

(python utilise l'indexation standard basée sur 0)

21voto

proski Points 31

Cela ne nécessite que deux opérations de liste (pas d'indice) : mylist.remove(targetvalue) mylist.insert(0, targetvalue)

1voto

Thomas Weigel Points 111

Remarque : le code suivant (et l'exemple de code que vous avez proposé) placera tous les éléments correspondants au premier plan.

x = targetvalue
for i in range(len(mylist)):
    if(mylist[i] == x):
        mylist = [mylist[i]] + mylist[:i] + mylist[i+1:]

Par exemple, si mylist = [1, 2, 3, 4, 3] et x = 3, cela donnera [3, 3, 1, 2, 4].

0voto

iamaziz Points 49

Utilisation de la technique de conception d'insertion (qui fait exactement la même chose que ce que Mike a suggéré) :

def move-to-front(key, mylist):
   for i in range(len(mylist[:mylist.index(key)]), -1, -1):
      mylist[i] = mylist[i - 1]
   mylist[0] = key

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