2015-07-11 14 views
8

Ecco un pseudocodice che ho scritto che descrive il mio problema: -Come mutare una lista con una funzione in python?

func(s): 
    #returns a value of s 

x = a list of strings 
print func(x) 
print x #these two should give the SAME output 

Quando stampo il valore di x alla fine, io voglio che sia quello restituito dalla func (x). Posso fare qualcosa di simile solo modificando la funzione (e senza impostare x = func(x))

+0

Modificare l'elenco, quindi restituirlo. –

+0

Ad esempio: 'def func (s): s.append ('test'); return s' –

risposta

4
func(s): 
    s[:] = whatever after mutating 
    return s 

x = a list of strings 
print func(x) 
print x 

In realtà non c'è bisogno di restituire nulla:

def func(s): 
    s[:] = [1,2,3] 

x = [1,2] 
print func(x) 
print x # -> [1,2,3] 

Dipende tutto da ciò che stai facendo, l'aggiunta o qualsiasi mutazione diretta della lista si rifletterà al di fuori della funzione mentre stai effettivamente cambiando l'oggetto/l'elenco originale passato. Se stavi facendo qualcosa che creava un nuovo oggetto e volevi il ch le anges riflesse nella lista passata nell'impostazione s[:] =.. cambieranno la lista originale.

+1

Grazie ... l'ho provato ma inizialmente non funzionava ..... poi ho usato una variabile globale qualsiasi funzionasse: D ... grazie –

+0

@RitvikSharma, il contenuto della lista passata sarà cambiato da qualunque cosa iterabile è sul lato destro dell'assegnazione –

+1

È molto difficile cercare qualcosa come '[:]'. È molto utile la pace del codice. – XuMuK

7

che è già come si comporta, la funzione può mutare l'elenco

>>> l = ['a', 'b', 'c'] # your list of strings 
>>> def add_something(x): x.append('d') 
... 
>>> add_something(l) 
>>> l 
['a', 'b', 'c', 'd'] 

Nota, tuttavia, che non si può mutare l'originale lista in questo modo

def modify(x): 
    x = ['something'] 

(Quanto sopra assegnare x ma non la lista originale l)

Se si desidera inserire un nuovo elenco nella lista, avrete bisogno di qualcosa di simile:

def modify(x): 
    x[:] = ['something'] 
+0

Ricordarsi di non assegnare a 'x' nel corpo della funzione. Altrimenti 'x' diventerà una variabile locale (un oggetto nel namespace della funzione) e" coprirà "l'argomento passato alla funzione. – werkritter