2009-06-18 9 views
29

J'ai un tableau avec un ensemble d'éléments. J'aimerais apporter un élément donné à l'avant mais sinon laisser l'ordre inchangé. Les gens ont-ils des suggestions quant à la syntaxe la plus propre pour cela?Syntaxe simple pour mettre un élément de liste au premier plan en python?

C'est le meilleur que j'ai pu trouver, mais il semble que ce soit une mauvaise forme d'avoir une opération N log N lorsqu'une opération N pourrait être faite.

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

Cheers, /YGA

+0

double possible de [Déplacer un élément à l'intérieur une liste?] (https://stackoverflow.com/questions/3173154/move-an-item-inside-a-list) –

Répondre

64

Je voudrais aller avec:

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

Pour faire (par exemple) le 5ème élément à l'avant, utilisez:

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

Remarque: le code suivant (et l'exemple de code que vous avez proposé) mettra tous éléments assortis à l'avant.

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 se traduira par [3, 3, 1, 2, 4].

1

En utilisant une technique de conception d'insertion (qui fait exactement identique à 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 
9

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

Questions connexes