Sie sind auf Seite 1von 12

6/4/2014

5. Estructuras de datos Tutorial de Python v2.7.0 documentation

5. Estructuras de datos
Este captulo describe algunas cosas que ya aprendiste en ms detalle, y agrega algunas cosas nuevas tambin.

5.1. Ms sobre listas


El tipo de dato lista tiene algunos mtodos ms. Aqu estn todos los mtodos de los objetos lista:
l i s t . a p p e n d (x)

Agrega un tem al final de la lista; equivale a


l i s t . e x t e n d (L)

a [ l e n ( a ) : ]=[ x ] .

Extiende la lista agregndole todos los tems de la lista dada; equivale a


l i s t . i n s e r t (i, x)

a [ l e n ( a ) : ]=L .

Inserta un tem en una posicin dada. El primer argumento es el ndice del tem delante del cual se insertar, por lo tanto a . i n s e r t ( 0 , x ) inserta al principio de la lista, y a . i n s e r t ( l e n ( a ) ,x )equivale a a . a p p e n d ( x ) .
l i s t . r e m o v e (x)

Quita el primer tem de la lista cuyo valor sea x. Es un error si no existe tal tem.
l i s t . p o p (

[i ])

Quita el tem en la posicin dada de la lista, y lo devuelve. Si no se especifica un ndice, a . p o p ( ) quita y devuelve el ltimo tem de la lista. (Los corchetes que encierran a i en la firma del mtodo denotan que el parmetro es opcional, no que deberas escribir corchetes en esa posicin. Vers esta notacin con frecuencia en la Referencia de la Biblioteca de Python.)
l i s t . i n d e x (x)

Devuelve el ndice en la lista del primer tem cuyo valor sea x. Es un error si no existe tal tem.
l i s t . c o u n t (x)

Devuelve el nmero de veces que x aparece en la lista.


l i s t . s o r t ()

Ordena los tems de la lista, in situ.


l i s t . r e v e r s e ()
http://docs.python.org.ar/tutorial/2/datastructures.html 1/12

6/4/2014

5. Estructuras de datos Tutorial de Python v2.7.0 documentation

Invierte los elementos de la lista, in situ. Un ejemplo que usa la mayora de los mtodos de lista:
> > >a=[ 6 6 . 2 5 ,3 3 3 ,3 3 3 ,1 ,1 2 3 4 . 5 ] > > >p r i n ta . c o u n t ( 3 3 3 ) ,a . c o u n t ( 6 6 . 2 5 ) ,a . c o u n t ( ' x ' ) 210 > > >a . i n s e r t ( 2 ,1 ) > > >a . a p p e n d ( 3 3 3 ) > > >a [ 6 6 . 2 5 ,3 3 3 ,1 ,3 3 3 ,1 ,1 2 3 4 . 5 ,3 3 3 ] > > >a . i n d e x ( 3 3 3 ) 1 > > >a . r e m o v e ( 3 3 3 ) > > >a [ 6 6 . 2 5 ,1 ,3 3 3 ,1 ,1 2 3 4 . 5 ,3 3 3 ] > > >a . r e v e r s e ( ) > > >a [ 3 3 3 ,1 2 3 4 . 5 ,1 ,3 3 3 ,1 ,6 6 . 2 5 ] > > >a . s o r t ( ) > > >a [ 1 ,1 ,6 6 . 2 5 ,3 3 3 ,3 3 3 ,1 2 3 4 . 5 ]

5.1.1. Usando listas como pilas


Los mtodos de lista hacen que resulte muy fcil usar una lista como una pila, donde el ltimo elemento aadido es el primer elemento retirado (ltimo en entrar, primero en salir). Para agregar un tem a la cima de la pila, use a p p e n d ( ) . Para retirar un tem de la cima de la pila, use p o p ( )sin un ndice explcito. Por ejemplo:
> > >s t a c k=[ 3 ,4 ,5 ] > > >s t a c k . a p p e n d ( 6 ) > > >s t a c k . a p p e n d ( 7 ) > > >s t a c k [ 3 ,4 ,5 ,6 ,7 ] > > >s t a c k . p o p ( ) 7 > > >s t a c k [ 3 ,4 ,5 ,6 ] > > >s t a c k . p o p ( ) 6 > > >s t a c k . p o p ( ) 5 > > >s t a c k [ 3 ,4 ]

5.1.2. Usando listas como colas


Tambin es posible usar una lista como una cola, donde el primer elemento aadido es el primer elemento retirado (primero en entrar, primero en salir); sin embargo, las listas no son eficientes para este propsito. Agregar y sacar del final de la lista es rpido, pero insertar o sacar del comienzo de una lista es lento (porque todos los otros elementos tienen que ser
http://docs.python.org.ar/tutorial/2/datastructures.html 2/12

6/4/2014

5. Estructuras de datos Tutorial de Python v2.7.0 documentation

desplazados por uno). Para implementar una cola, us c o l l e c t i o n s . d e q u e el cual fue diseado para agregar y sacar de ambas puntas de forma rpida. Por ejemplo:
> > >f r o mc o l l e c t i o n si m p o r td e q u e > > >q u e u e=d e q u e ( [ " E r i c " ," J o h n " ," M i c h a e l " ] ) > > >q u e u e . a p p e n d ( " T e r r y " ) #l l e g aT e r r y > > >q u e u e . a p p e n d ( " G r a h a m " ) #l l e g aG r a h a m > > >q u e u e . p o p l e f t ( ) #e lp r i m e r oe nl l e g a ra h o r as ev a ' E r i c ' > > >q u e u e . p o p l e f t ( ) #e ls e g u n d oe nl l e g a ra h o r as ev a ' J o h n ' > > >q u e u e #e lr e s t od el ac o l ae n r d e nd el l e g a d a [ ' M i c h a e l ' ,' T e r r y ' ,' G r a h a m ' ]

5.1.3. Herramientas de programacin funcional


Hay tres funciones integradas que son muy tiles cuando se usan con listas: r e d u c e ( ) .
f i l t e r ( f u n c i o n ,s e c u e n c i a ) devuelve f i l t e r ( ) ,m a p ( ) ,

una secuencia con aquellos tems de la secuencia para los cuales f u n c i o n ( i t e m )es verdadero. Si secuencia es un s t r i n go t u p l e , el resultado ser del mismo tipo; de otra manera, siempre ser l i s t . Por ejemplo, para calcular unos nmeros primos:
> > >d e ff ( x ) :r e t u r nx%2! =0a n dx%3! =0 . . . > > >f i l t e r ( f ,r a n g e ( 2 ,2 5 ) ) [ 5 ,7 ,1 1 ,1 3 ,1 7 ,1 9 ,2 3 ]

a f u n c i o n ( i t e m ) por cada uno de los tems de la secuencia y devuelve una lista de los valores retornados. Por ejemplo, para calcular unos cubos:
> > >d e fc u b o ( x ) :r e t u r nx * x * x . . . > > >m a p ( c u b o ,r a n g e ( 1 ,1 1 ) ) [ 1 ,8 ,2 7 ,6 4 ,1 2 5 ,2 1 6 ,3 4 3 ,5 1 2 ,7 2 9 ,1 0 0 0 ]

m a p ( f u n c i o n ,s e c u e n c i a ) llama

Se puede pasar ms de una secuencia; la funcin debe entonces tener tantos argumentos como secuencias haya y es llamada con el tem correspondiente de cada secuencia (o N o n e si alguna secuencia es ms corta que otra). Por ejemplo:
> > >s e c=r a n g e ( 8 ) > > >d e fa d d ( x ,y ) :r e t u r nx + y . . . > > >m a p ( a d d ,s e c ,s e c ) [ 0 ,2 ,4 ,6 ,8 ,1 0 ,1 2 ,1 4 ]

http://docs.python.org.ar/tutorial/2/datastructures.html

3/12

6/4/2014

5. Estructuras de datos Tutorial de Python v2.7.0 documentation

un nico valor que se construye llamando a la funcin binaria funcion con los primeros dos tems de la secuencia, entonces con el resultado y el siguiente tem, y as sucesivamente. Por ejemplo, para calcular la suma de los nmeros de 1 a 10:
> > >d e fs u m a r ( x , y ) :r e t u r nx + y . . . > > >r e d u c e ( s u m a r ,r a n g e ( 1 ,1 1 ) ) 5 5

r e d u c e ( f u n c i o n , s e c u e n c i a ) devuelve

Si slo hay un tem en la secuencia, se devuelve su valor; si la secuencia est vaca, se lanza una excepcin. Un tercer argumento puede pasarse para indicar el valor inicial. En este caso el valor inicial se devuelve para una secuencia vaca, y la funcin se aplica primero al valor inicial y el primer tem de la secuencia, entonces al resultado y al siguiente tem, y as sucesivamente. Por ejemplo,
> > >d e fs u m ( s e c ) : . . . d e fs u m a r ( x , y ) :r e t u r nx + y . . . r e t u r nr e d u c e ( s u m a r ,s e c ,0 ) . . . > > >s u m ( r a n g e ( 1 ,1 1 ) ) 5 5 > > >s u m ( [ ] ) 0

No uses la definicin de este ejemplo de s u m ( ) : ya que la sumatoria es una necesidad tan comn, se provee una funcin integrada s u m ( s e c u e n c i a )que funciona exactamente as. Nuevo en la versin 2.3.

5.1.4. Listas por comprensin


Las listas por comprensin proveen una forma concisa de crear listas sin tener que recurrir al uso de m a p ( ) ,f i l t e r ( ) y/o l a m b d a . La definicin resultante de la lista a menudo tiende a ser ms clara que las listas formadas usando esas construcciones. Cada lista por comprensin consiste de una expresin seguida por una clusula f o r , luego cero o ms clusulas f o ro i f . El resultado ser una lista que resulta de evaluar la expresin en el contexto de las clusulas f o ry i f que sigan. Si la expresin evalua a una tupla, debe encerrarse entre parntesis.
> > >f r u t a f r e s c a=[ ' b a n a n a ' ,' m o r ad eL o g a n' ,' m a r a c u y a ' ] > > >[ a r m a . s t r i p ( )f o ra r m ai nf r u t a f r e s c a ] [ ' b a n a n a ' ,' m o r ad eL o g a n ' ,' m a r a c u y a ' ] > > >v e c=[ 2 ,4 ,6 ] > > >[ 3 * xf o rxi nv e c ] [ 6 ,1 2 ,1 8 ]
http://docs.python.org.ar/tutorial/2/datastructures.html 4/12

6/4/2014

5. Estructuras de datos Tutorial de Python v2.7.0 documentation

> > >[ 3 * xf o rxi nv e ci fx>3 ] [ 1 2 ,1 8 ] > > >[ 3 * xf o rxi nv e ci fx<2 ] [ ] > > >[ [ x , x * * 2 ]f o rxi nv e c ] [ [ 2 ,4 ] ,[ 4 ,1 6 ] ,[ 6 ,3 6 ] ] > > >[ x ,x * * 2f o rxi nv e c ] #e r r o r-s er e q u i e r e np a r n t e s i sp a r at u p l a s T r a c e b a c k( m o s tr e c e n tc a l ll a s t ) : . . . [ x ,x * * 2f o rxi nv e c ] ^ S y n t a x E r r o r :i n v a l i ds y n t a x > > >[ ( x ,x * * 2 )f o rxi nv e c ] [ ( 2 ,4 ) ,( 4 ,1 6 ) ,( 6 ,3 6 ) ] > > >v e c 1=[ 2 ,4 ,6 ] > > >v e c 2=[ 4 ,3 ,9 ] > > >[ x * yf o rxi nv e c 1f o ryi nv e c 2 ] [ 8 ,6 ,1 8 ,1 6 ,1 2 ,3 6 ,2 4 ,1 8 ,5 4 ] > > >[ x + yf o rxi nv e c 1f o ryi nv e c 2 ] [ 6 ,5 ,7 ,8 ,7 ,5 ,1 0 ,9 ,3 ] > > >[ v e c 1 [ i ] * v e c 2 [ i ]f o rii nr a n g e ( l e n ( v e c 1 ) ) ] [ 8 ,1 2 ,5 4 ]

Las listas por comprensin son mucho ms flexibles que expresiones complejas y funciones anidadas:
> > >[ s t r ( r o u n d ( 3 5 5 / 1 1 3 . 0 ,i ) )f o rii nr a n g e ( 1 , 6 ) ] [ ' 3 . 1 ' ,' 3 . 1 4 ' ,' 3 . 1 4 2 ' ,' 3 . 1 4 1 6 ' ,' 3 . 1 4 1 5 9 ' ]

m a p ( )

y pueden aplicarse a

5.1.5. Listas por comprensin anidadas


Si tienes el estmago suficiente, las listas por comprensin pueden anidarse. Son una herramienta poderosa pero, como toda herramienta poderosa, deben usarse con cuidado, o ni siquiera usarse. Considera el siguiente ejemplo de una matriz de 3x3 como una lista que contiene tres listas, una por fila:
> > >m a t=[ . . . [ 1 ,2 ,3 ] , . . . [ 4 ,5 ,6 ] , . . . [ 7 ,8 ,9 ] , . . . ]

Ahora, si quisieras intercambiar filas y columnas, podras usar una lista por comprensin:
> > >p r i n t[ [ f i l a [ i ]f o rf i l ai nm a t ]f o rii n[ 0 ,1 ,2 ] ] [ [ 1 ,4 ,7 ] ,[ 2 ,5 ,8 ] ,[ 3 ,6 ,9 ] ]

Se debe tener cuidado especial para la lista por comprensin anidada: Para evitar aprensin cuando se anidan lista por comprensin, lee de derecha a
http://docs.python.org.ar/tutorial/2/datastructures.html 5/12

6/4/2014

5. Estructuras de datos Tutorial de Python v2.7.0 documentation

izquierda. Una versin ms detallada de este retazo de cdigo muestra el flujo de manera explcita:
f o rii n[ 0 ,1 ,2 ] : f o rf i l ai nm a t : p r i n tf i l a [ i ] , p r i n t

En el mundo real, deberas preferir funciones predefinidas a declaraciones con flujo complejo. La funcin z i p ( )hara un buen trabajo para este caso de uso:
> > >z i p ( * m a t ) [ ( 1 ,4 ,7 ) ,( 2 ,5 ,8 ) ,( 3 ,6 ,9 ) ]

Ver Desempaquetando una lista de argumentos para detalles en el asterisco de esta lnea.

5.2. La instruccin

d e l

Hay una manera de quitar un tem de una lista dado su ndice en lugar de su valor: la instruccin d e l . Esta es diferente del mtodo p o p ( ) , el cual devuelve un valor. La instruccin d e l tambin puede usarse para quitar secciones de una lista o vaciar la lista completa (lo que hacamos antes asignando una lista vaca a la seccin). Por ejemplo:
> > >a=[ 1 ,1 ,6 6 . 2 5 ,3 3 3 ,3 3 3 ,1 2 3 4 . 5 ] > > >d e la [ 0 ] > > >a [ 1 ,6 6 . 2 5 ,3 3 3 ,3 3 3 ,1 2 3 4 . 5 ] > > >d e la [ 2 : 4 ] > > >a [ 1 ,6 6 . 2 5 ,1 2 3 4 . 5 ] > > >d e la [ : ] > > >a [ ]
d e lpuede

usarse tambin para eliminar variables:

> > >d e la

Hacer referencia al nombre ade aqu en ms es un error (al menos hasta que se le asigne otro valor). Veremos otros usos para d e lms adelante.

5.3. Tuplas y secuencias


Vimos que las listas y cadenas tienen propiedades en comn, como el indizado y las operaciones de seccionado. Estas son dos ejemplos de datos de tipo secuencia (ver typesseq). Como Python es un lenguaje en evolucin, otros datos de tipo secuencia pueden
http://docs.python.org.ar/tutorial/2/datastructures.html 6/12

6/4/2014

5. Estructuras de datos Tutorial de Python v2.7.0 documentation

agregarse. Existe otro dato de tipo secuencia estndar: la tupla. Una tupla consiste de un nmero de valores separados por comas, por ejemplo:
> > >t=1 2 3 4 5 ,5 4 3 2 1 ,' h o l a ! ' > > >t [ 0 ] 1 2 3 4 5 > > >t ( 1 2 3 4 5 ,5 4 3 2 1 ,' h o l a ! ' ) > > >#L a st u p l a sp u e d e na n i d a r s e : . . .u=t ,( 1 ,2 ,3 ,4 ,5 ) > > >u ( ( 1 2 3 4 5 ,5 4 3 2 1 ,' h o l a ! ' ) ,( 1 ,2 ,3 ,4 ,5 ) )

Como puedes ver, en la salida las tuplas siempre se encierran entre parntesis, para que las tuplas anidadas puedan interpretarse correctamente; pueden ingresarse con o sin parntesis, aunque a menudo los parntesis son necesarios de todas formas (si la tupla es parte de una expresin ms grande). Las tuplas tienen muchos usos. Por ejemplo: pares ordenados (x, y), registros de empleados de una base de datos, etc. Las tuplas, al igual que las cadenas, son inmutables: no es posible asignar a los tems individuales de una tupla (aunque puedes simular bastante ese efecto mediante seccionado y concatenacin). Tambin es posible crear tuplas que contengan objetos mutables como listas. Un problema particular es la construccin de tuplas que contengan 0 o 1 tem: la sintaxis presenta algunas peculiaridades para estos casos. Las tuplas vacas se construyen mediante un par de parntesis vaco; una tupla con un tem se construye poniendo una coma a continuacin del valor (no alcanza con encerrar un nico valor entre parntesis). Feo, pero efectivo. Por ejemplo:
> > >v a c i a=( ) > > >s i n g l e t o n=' h o l a ' , > > >l e n ( v a c i a ) 0 > > >l e n ( s i n g l e t o n ) 1 > > >s i n g l e t o n ( ' h o l a ' , ) #< -n o t a rl ac o m aa lf i n a l

La declaracin t = 1 2 3 4 5 , 5 4 3 2 1 , ' h o l a ! ' es un ejemplo de empaquetado de tuplas: los valores 1 2 3 4 5 ,5 4 3 2 1y ' h o l a ! 'se empaquetan juntos en una tupla. La operacin inversa tambin es posible:
> > >x ,y ,z=t

Esto se llama, apropiadamente, desempaquetado de secuencias, y funciona para cualquier secuencia en el lado derecho del igual. El desempaquetado de secuencias requiere que la lista de variables a la izquierda tenga el mismo nmero de elementos que el tamao de la
http://docs.python.org.ar/tutorial/2/datastructures.html 7/12

6/4/2014

5. Estructuras de datos Tutorial de Python v2.7.0 documentation

secuencia. Not que la asignacin mltiple es en realidad slo una combinacin de empaquetado de tuplas y desempaquetado de secuencias.

5.4. Conjuntos
Python tambin incluye un tipo de dato para conjuntos. Un conjunto es una coleccin no ordenada y sin elementos repetidos. Los usos bsicos de stos incluyen verificacin de pertenencia y eliminacin de entradas duplicadas. Los conjuntos tambin soportan operaciones matemticas como la unin, interseccin, diferencia, y diferencia simtrica. Una pequea demostracin:
> > >c a n a s t a=[ ' m a n z a n a ' ,' n a r a n j a ' ,' m a n z a n a ' ,' p e r a ' ,' n a r a n j a ' ,' b a n a n a ' ] > > >f r u t a=s e t ( c a n a s t a ) #c r e au nc o n j u n t os i nr e p e t i d o s > > >f r u t a s e t ( [ ' p e r a ' ,' m a n z a n a ' ,' b a n a n a ' ,' n a r a n j a ' ] ) > > >' n a r a n j a 'i nf r u t a #v e r i f i c a c i nd ep e r t e n e n c i ar p i d a T r u e > > >' y e r b a 'i nf r u t a F a l s e > > >#v e a m o sl a so p e r a c i o n e sp a r al a sl e t r a s n i c a sd ed o sp a l a b r a s . . . > > >a=s e t ( ' a b r a c a d a b r a ' ) > > >b=s e t ( ' a l a c a z a m ' ) > > >a #l e t r a s n i c a se na s e t ( [ ' a ' ,' r ' ,' b ' ,' c ' ,' d ' ] ) > > >a-b #l e t r a se nap e r on oe nb s e t ( [ ' r ' ,' b ' ,' d ' ] ) > > >a|b #l e t r a se naoe nb s e t ( [ ' a ' ,' c ' ,' b ' ,' d ' ,' m ' ,' l ' ,' r ' ,' z ' ] ) > > >a&b #l e t r a se naye nb s e t ( [ ' a ' ,' c ' ] ) > > >a^b #l e t r a se naobp e r on oe na m b o s s e t ( [ ' b ' ,' d ' ,' m ' ,' l ' ,' r ' ,' z ' ] )

5.5. Diccionarios
Otro tipo de dato til includo en Python es el diccionario (ver typesmapping). Los diccionarios se encuentran a veces en otros lenguajes como memorias asociativas o arreglos asociativos. A diferencia de las secuencias, que se indexan mediante un rango numrico, los diccionarios se indexan con claves, que pueden ser cualquier tipo inmutable; las cadenas y nmeros siempre pueden ser claves. Las tuplas pueden usarse como claves si solamente contienen cadenas, nmeros o tuplas; si una tupla contiene cualquier objeto mutable directa o indirectamente, no puede usarse como clave. No pods usar listas como claves, ya que las listas pueden modificarse usando asignacin por ndice, asignacin por seccin, o mtodos como a p p e n d ( )y e x t e n d ( ) . Lo mejor es pensar en un diccionario como un conjunto no ordenado de pares clave: valor,
http://docs.python.org.ar/tutorial/2/datastructures.html 8/12

6/4/2014

5. Estructuras de datos Tutorial de Python v2.7.0 documentation

con el requerimiento de que las claves sean nicas (dentro de un diccionario en particular). Un par de llaves crean un diccionario vaco: { } . Colocar una lista de pares clave:valor separados por comas entre las llaves aade pares clave:valor iniciales al diccionario; esta tambin es la forma en que los diccionarios se presentan en la salida. Las operaciones principales sobre un diccionario son guardar un valor con una clave y extraer ese valor dada la clave. Tambin es posible borrar un par clave:valor con d e l . Si uss una clave que ya est en uso para guardar un valor, el valor que estaba asociado con esa clave se pierde. Es un error extraer un valor usando una clave no existente. El mtodo k e y s ( ) de un diccionario devuelve una lista de todas las claves en uso de ese diccionario, en un orden arbitrario (si la quers ordenada, simplemente us el metodo s o r t ( ) sobre la lista de claves). Para verificar si una clave est en el diccionario, utiliz la palabra clave i n . Un pequeo ejemplo de uso de un diccionario:
> > >t e l={ ' j a c k ' :4 0 9 8 ,' s a p e ' :4 1 3 9 } > > >t e l [ ' g u i d o ' ]=4 1 2 7 > > >t e l { ' s a p e ' :4 1 3 9 ,' j a c k ' :4 0 9 8 ,' g u i d o ' :4 1 2 7 } > > >t e l [ ' j a c k ' ] 4 0 9 8 > > >d e lt e l [ ' s a p e ' ] > > >t e l [ ' i r v ' ]=4 1 2 7 > > >t e l { ' j a c k ' :4 0 9 8 ,' i r v ' :4 1 2 7 ,' g u i d o ' :4 1 2 7 } > > >t e l . k e y s ( ) [ ' j a c k ' ,' i r v ' ,' g u i d o ' ] > > >' g u i d o 'i nt e l T r u e

El constructor d i c t ( ) crea un diccionario directamente desde listas de pares clave-valor guardados como tuplas. Cuando los pares siguen un patrn, se puede especificar de forma compacta la lista de pares clave-valor por comprensin.
> > >d i c t ( [ ( ' s a p e ' ,4 1 3 9 ) ,( ' g u i d o ' ,4 1 2 7 ) ,( ' j a c k ' ,4 0 9 8 ) ] ) { ' s a p e ' :4 1 3 9 ,' j a c k ' :4 0 9 8 ,' g u i d o ' :4 1 2 7 } > > >d i c t ( [ ( x ,x * * 2 )f o rxi n( 2 ,4 ,6 ) ] ) #u s eal i s tc o m p r e h e n s i o n { 2 :4 ,4 :1 6 ,6 :3 6 }

Ms adelante en este tutorial, aprenderemos acerca de Expresiones Generadoras que estn mejor preparadas para la tarea de proveer pares clave-valor al constructor d i c t ( ) . Cuando las claves son cadenas simples, a veces resulta ms fcil especificar los pares usando argumentos por palabra clave:
> > >d i c t ( s a p e = 4 1 3 9 ,g u i d o = 4 1 2 7 ,j a c k = 4 0 9 8 ) { ' s a p e ' :4 1 3 9 ,' j a c k ' :4 0 9 8 ,' g u i d o ' :4 1 2 7 }

http://docs.python.org.ar/tutorial/2/datastructures.html

9/12

6/4/2014

5. Estructuras de datos Tutorial de Python v2.7.0 documentation

5.6. Tcnicas de iteracin


Cuando iteramos sobre diccionarios, se pueden obtener al mismo tiempo la clave y su valor correspondiente usando el mtodo i t e r i t e m s ( ) .
> > >c a b a l l e r o s={ ' g a l l a h a d ' :' e lp u r o ' ,' r o b i n ' :' e lv a l i e n t e ' } > > >f o rk ,vi nc a b a l l e r o s . i t e r i t e m s ( ) : . . . p r i n tk ,v . . . g a l l a h a de lp u r o r o b i ne lv a l i e n t e

Cuando se itera sobre una secuencia, se puede obtener el ndice de posicin junto a su valor correspondiente usando la funcin e n u m e r a t e ( ) .
> > >f o ri ,vi ne n u m e r a t e ( [ ' t a ' ,' t e ' ,' t i ' ] ) : . . . p r i n ti ,v . . . 0t a 1t e 2t i

Para iterar sobre dos o ms secuencias al mismo tiempo, los valores pueden emparejarse con la funcin z i p ( ) .
> > >p r e g u n t a s=[ ' n o m b r e ' ,' o b j e t i v o ' ,' c o l o rf a v o r i t o ' ] > > >r e s p u e s t a s=[ ' l a n c e l o t ' ,' e ls a n t og r i a l ' ,' a z u l ' ] > > >f o rp ,ri nz i p ( p r e g u n t a s ,r e s p u e s t a s ) : . . . p r i n t' C u a le st u{ 0 } ? { 1 } . ' . f o r m a t ( p ,r ) . . . C u a le st un o m b r e ? l a n c e l o t . C u a le st uo b j e t i v o ? e ls a n t og r i a l . C u a le st uc o l o rf a v o r i t o ? a z u l .

Para iterar sobre una secuencia en orden inverso, se especifica primero la secuencia al derecho y luego se llama a la funcin r e v e r s e d ( ) .
> > >f o rii nr e v e r s e d ( x r a n g e ( 1 , 1 0 , 2 ) ) : . . . p r i n ti . . . 9 7 5 3 1

Para iterar sobre una secuencia ordenada, se utiliza la funcin nueva lista ordenada dejando a la original intacta.

s o r t e d ( ) la

cual devuelve una

> > >c a n a s t a=[ ' m a n z a n a ' ,' n a r a n j a ' ,' m a n z a n a ' ,' p e r a ' ,' n a r a n j a ' ,' b a n a n a ' ] > > >f o rfi ns o r t e d ( s e t ( c a n a s t a ) ) :
http://docs.python.org.ar/tutorial/2/datastructures.html 10/12

6/4/2014

5. Estructuras de datos Tutorial de Python v2.7.0 documentation

. . . p r i n tf . . . b a n a n a m a n z a n a n a r a n j a p e r a

5.7. Ms acerca de condiciones


Las condiciones usadas en las instrucciones no slo comparaciones.
w h i l ee i f pueden

contener cualquier operador,

Los operadores de comparacin i ny n o t i n verifican si un valor est (o no est) en una secuencia. Los operadores i se i sn o t comparan si dos objetos son realmente el mismo objeto; esto es significativo slo para objetos mutables como las listas. Todos los operadores de comparacin tienen la misma prioridad, la cual es menor que la de todos los operadores numricos. Las comparaciones pueden encadenarse. Por ejemplo, by adems si bes igual a c .
a<b= = c verifica

si

a es

menor que

Las comparaciones pueden combinarse mediante los operadores booleanos a n dy o r , y el resultado de una comparacin (o de cualquier otra expresin booleana) puede negarse con n o t . Estos tienen prioridades menores que los operadores de comparacin; entre ellos n o t tiene la mayor prioridad y o r la menor, o sea que A a n dn o tB o r C equivale a ( Aa n d( n o tB ) ) o rC . Como siempre, los parntesis pueden usarse para expresar la composicin deseada. Los operadores booleanos a n d y o r son los llamados operadores cortocircuito: sus argumentos se evalan de izquierda a derecha, y la evaluacin se detiene en el momento en que se determina su resultado. Por ejemplo, si A y C son verdaderas pero B es falsa, en A a n d Ba n d C no se evala la expresin C . Cuando se usa como un valor general y no como un booleano, el valor devuelto de un operador cortocircuito es el ltimo argumento evaluado. Es posible asignar el resultado de una comparacin u otra expresin booleana a una variable. Por ejemplo,
> > >c a d e n a 1 ,c a d e n a 2 ,c a d e n a 3=' ' ,' T r o n d h e i m ' ,' P a s oH a m m e r ' > > >n o n _ n u l o=c a d e n a 1o rc a d e n a 2o rc a d e n a 3 > > >n o n _ n u l o ' T r o n d h e i m '

Not que en Python, a diferencia de C, la asignacin no puede ocurrir dentro de expresiones. Los programadores de C pueden renegar por esto, pero es algo que evita un tipo de problema comn encontrado en programas en C: escribir =en una expresin cuando lo que se quiere escribir es = = .
http://docs.python.org.ar/tutorial/2/datastructures.html 11/12

6/4/2014

5. Estructuras de datos Tutorial de Python v2.7.0 documentation

5.8. Comparando secuencias y otros tipos


Las secuencias pueden compararse con otros objetos del mismo tipo de secuencia. La comparacin usa orden lexicogrfico: primero se comparan los dos primeros tems, si son diferentes esto ya determina el resultado de la comparacin; si son iguales, se comparan los siguientes dos tems, y as sucesivamente hasta llegar al final de alguna de las secuencias. Si dos tems a comparar son ambos secuencias del mismo tipo, la comparacin lexicogrfica es recursiva. Si todos los tems de dos secuencias resultan iguales, se considera que las secuencias son iguales. Si una secuencia es una subsecuencia inicial de la otra, la secuencia ms corta es la menor. El orden lexicogrfico para cadenas de caracteres utiliza el orden ASCII para caracteres individuales. Algunos ejemplos de comparaciones entre secuencias del mismo tipo:
( 1 ,2 ,3 ) <( 1 ,2 ,4 ) [ 1 ,2 ,3 ] <[ 1 ,2 ,4 ] ' A B C '<' C '<' P a s c a l '<' P y t h o n ' ( 1 ,2 ,3 ,4 ) <( 1 ,2 ,4 ) ( 1 ,2 ) <( 1 ,2 ,1 ) ( 1 ,2 ,3 ) = =( 1 . 0 ,2 . 0 ,3 . 0 ) ( 1 ,2 ,( ' a a ' ,' a b ' ) ) <( 1 ,2 ,( ' a b c ' ,' a ' ) ,4 )

Observ que comparar objetos de diferentes tipos es legal. El resultado es determinstico pero arbitrario: los tipos se ordenan por su nombre. Por lo tanto, una lista ( l i s t ) siempre evala como menor que una cadena ( s t r i n g ). Los tipos numricos diferentes se comparan a su valor numrico, o sea 0 es igual a 0.0, etc. No confiar demasiado en las reglas para comparar objetos de diferentes tipos; pueden cambiar en una versin futura del lenguaje.

http://docs.python.org.ar/tutorial/2/datastructures.html

12/12