2012-08-12 16 views
14

Sono un novizio completo di python e sto provando a passare un array come argomento a una funzione python che dichiara un elenco/array come parametro.Dichiarare una funzione python con parametri di array e passare un argomento array alla chiamata di funzione?

Sono sicuro che sto dichiarandolo sbagliato,

qui va:

def dosomething(listparam): 
     #do something here 
dosomething(listargument) 

Chiaramente questo non funziona, che cosa sto facendo male?

Grazie

+2

dovrebbe funzionare. Potresti mostrare del codice reale? – stranac

+1

Puoi fornire qualche altro contesto, forse il codice effettivo che fallisce? (Se possibile, rendilo un [buon esempio] (http://sscce.org/)). E cosa intendi con * dichiarando *? – phihag

+0

oh sì è assolutamente mio cattivo ... stavo facendo questo: per x nel range (len (lista)): print x; anziché la lista di stampa [x] ... grazie a tutti! – user1020069

risposta

19

Quello che hai è sulla strada giusta.

def dosomething(thelist): 
    for element in thelist: 
     print element 

dosomething(['1','2','3']) 
alist = ['red','green','blue'] 
dosomething(alist) 

produce l'output:

1 
2 
3 
red 
green 
blue 

Un paio di cose da notare dato il vostro commento sopra: a differenza di lingue C-famiglia, spesso non c'è bisogno di perdere tempo con il monitoraggio l'indice, mentre l'iterazione su un elenco, a meno che l'indice stesso non sia importante. Se davvero hai bisogno dell'indice, però, puoi utilizzare enumerate(list) per ottenere coppie index,element anziché eseguire la danza x in range(len(thelist)).

+1

Penso che tu intenda enumerare (lista) ' –

+0

Oh, certo, mio ​​cattivo. –

6

forse si desidera decomprimere elementi di array, non so se ho capito, ma al di sotto un esempio:

def my_func(*args): 
    for a in args: 
     print a 

my_func(*[1,2,3,4]) 
my_list = ['a','b','c'] 
my_func(*my_list) 
3

Credo di essere chiaro su ciò che il PO è stato davvero chiedendo .. Vuoi passare l'intero array/elenco e operare su di esso all'interno della funzione? O vuoi la stessa cosa fatta su ogni valore/elemento nella matrice/lista. Se quest'ultimo è ciò che desideri, ho trovato un metodo che funziona bene.

Sono più familiare con i linguaggi di programmazione come Fortran e C, in cui è possibile definire le funzioni elementali che operano su ciascun elemento all'interno di un array. Alla fine ho rintracciato il pitone equivalente a questo e ho pensato di ripubblicare la soluzione qui. La chiave è 'vettorizzare' la funzione. Ecco un esempio:

def myfunc(a,b): 
    if (a>b): return a 
    else: return b 
vecfunc = np.vectorize(myfunc) 
result=vecfunc([[1,2,3],[5,6,9]],[7,4,5]) 
print(result) 

uscita:

[[7 4 5] 
[7 6 9]] 
Problemi correlati