2012-08-12 28 views
14

Soy un novato completo de python e intento pasar una matriz como argumento a una función de python que declara una lista/matriz como el parámetro.¿Declarar una función python con parámetros de matriz y pasar un argumento de matriz a la llamada a función?

Estoy seguro de que estoy declarando mal,

aquí va:

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

Es evidente que esto no funciona, ¿qué estoy haciendo mal?

Gracias

+2

debería funcionar. ¿Podrías mostrar un código real? – stranac

+1

¿Podría proporcionar un poco más de contexto, tal vez el código real que falla? (Si es posible, conviértalo en [buen ejemplo] (http://sscce.org/)). ¿Y a qué te refieres con * declarar *? – phihag

+0

oh sí, es absolutamente mi mal ... estaba haciendo esto: para x en rango (len (lista)): imprimir x; en lugar de la lista de impresión [x] ... ¡gracias a todos! – user1020069

Respuesta

19

Lo que tiene está en el camino correcto.

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

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

produce la salida:

1 
2 
3 
red 
green 
blue 

Un par de cosas a la nota dada su comentario anterior: a diferencia de idiomas C-familia, que a menudo no tiene que molestarse con el seguimiento del índice, mientras que la iteración sobre una lista, a menos que el índice en sí sea importante. Si realmente necesita el índice, puede usar enumerate(list) para obtener index,element pares, en lugar de hacer el baile x in range(len(thelist)).

+1

Creo que quieres decir 'enumerar (enumerar)' –

+0

Oh, por supuesto, mi mal. –

6

Tal vez usted quiere descomprimir los elementos de matriz, no sé si lo tengo, pero por debajo de un ejemplo:

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

Creo que estoy confuso sobre lo que el PO fue realmente pidiendo .. . ¿Desea pasar toda la matriz/lista y operar dentro de la función? O desea hacer lo mismo en cada valor/elemento de la matriz/lista. Si esto último es lo que desea, he encontrado un método que funciona bien.

Estoy más familiarizado con los lenguajes de programación como Fortran y C, en los que puede definir funciones elementales que operan en cada elemento dentro de una matriz. Finalmente rastreé el equivalente pitón a esto y pensé que volvería a publicar la solución aquí. La clave es 'vectorizar' la función. Aquí está un ejemplo:

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) 

Salida:

[[7 4 5] 
[7 6 9]] 
Cuestiones relacionadas