2009-06-18 28 views
29

Ho una matrice con un insieme di elementi. Mi piacerebbe portare un dato elemento in primo piano ma altrimenti lasciare l'ordine invariato. La gente ha suggerimenti sulla sintassi più pulita per questo?Sintassi semplice per portare un elemento della lista in primo piano in python?

Questo è il migliore che sia stato in grado di venire, ma sembra una cattiva forma avere un'operazione di registro N quando un'operazione N può fare.

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

Cheers, /YGA

+0

Eventuali duplicati di [spostare un elemento all'interno una lista?] (https://stackoverflow.com/questions/3173154/move-an-item-inside-a-list) –

risposta

64

vorrei andare con:

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

per portare (per esempio) il 5 ° elemento al fronte, uso:

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

Nota: il seguente codice (e il codice di esempio che hai offerto) inserirà all elementi di corrispondenza nella parte anteriore.

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

Ad esempio, se mylist = [1, 2, 3, 4, 3] e x = 3, questo si tradurrà in [3, 3, 1, 2, 4].

1

Usando una tecnica di progettazione di inserimento (che fa esattamente uguale a quello che Mike ha suggerito):

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

Ciò richiede solo due operazioni di lista (senza indice): mylist.remove(targetvalue) mylist.insert(0, targetvalue)

Problemi correlati