jueves, 26 de febrero de 2009

LISTAS EN PYTHON

La lista es una colección de datos ordenada, alguna equivalencia con otros lenguajes seria los arrays o vectores. La lista puede contener cualquier tipo de dato (enteros, cadenas y otras listas ) veamos como se puede crear una lista:


>>>lista = [''hola'',2,''hacker'',[1,2,3,4,5]]


si se dan cuenta nuestra lista principal tiene un string ''hola'', un entero 2 y otra lista, una lista dentro de otra lista :) esta definicion estan valida como para python 2.x y 3.x


>>>print (lista)

['hola', 2, 'hacker', [1, 2, 3, 4, 5]]

bueno si queremos acceder a uno de los elementos de la lista lo hacemos utilizando el nombre que hacemos referencia a la lista en este caso lo llame lista puede ser cualquiera y entre corchete indicamos un indice, dicho indice va de 0 a n-1 veamos:

>>>print(lista[0])

hola

>>>print(lista[3])

[1, 2, 3, 4, 5]


pero yo quiero es acceder al 2 pero, no se que hago ya que es una lista dentro de otra veamos:


>>>print(lista[3][1])

2


wow que bien esto de las tuplas esta muy bien, tenga en cuenta que este operador [] se puede utilizar para modificar los elementos de la lista de esta forma:


>>>lista[0]=''Python''

>>>print(lista)

['Phython', 2, 'hacker', [1, 2, 3, 4, 5]]


como vimos con el operador [ ] podemos hacer referencia a cualquier elemento de la lista de 0 a n-1 pero Python trae consigo algo que es recorrer la lista de ultimo al primero utilizando numeros negativos veamos:


>>> nombres = [''angelica'',''paola'',''hackchan'',''python'']

>>>print (nombres[-1])

python

>>>print (nombres[-4])

angelica


Para los curiosos que no tienen sentido comun ;) eso es bueno cuando se es ultra novatillo es que si haces referecia por ejemplo print(nombres[-5]) o print (nombres[4]) va generar un error que dice, lista fuera de rango asi:


Traceback (most recent call last):

File "", line 1, in

IndexError: list index out of range


SLICING O PARTICIONANDO:


Este mecanismo nos permite seleccionar porciones de listas veamos:

sigamos con esta lista

>>> nombres = [''angelica'',''paola'',''hackchan'',''python'']

>>>print(nombres[1:3])

['paola', 'hackchan']

Como vemos para indicar porciones de lista damos un numero inicial en donde quiero que inicie mi porcion seguido de (:) dos puntos y un numero final que me dice el limite de la lista OJO: ese numero final actua o me imprime el elemento de la lista contenida en (numerofinal-1) por eso imprime hackchan y no Python, si queremos que vaya hasta python solo es:


>>>print(nombres[1:4])

['paola', 'hackchan','python']


definamos otra lista pero de solo enteros:


>>> n=[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30]


ahora vamos ver que si agregamos un tercer elemento inicio:fin:salto defino un salto para extraer los elementos de la lista:


solo con (inicio:fin)

>>>print(n[2:8])

[ 3, 4, 5, 6, 7, 8 ]


ahora con (inicio:fin:salto)

>>>print(n[2:8:2])

[3, 5, 7 ]


Como se dan cuenta con (inicio:fin:salto) lo primero que hace es obtener la lista definida en inicio:fin que en este caso al ser de 2:8 nos da [ 3, 4, 5, 6, 7, 8 ] ahora el salto nos dice que sea de dos en dos por lo tanto solo va quedar [ 3, 5, 7 ] espero que me entiendan :) pues esta muy facil el concepto de como funciona, de todas maneras todos los temas los estoy explicando sin tecnisismo alguno salvo alguna definicion de un libro pero que luego ire explicando con mis palabras :) cualquier duda no se olviden comentar ya sea para aclarar algo o cerregirme vale sigamos.


Extra:

definimos una lista cualquiera o esta :)

>>> l=[''hackchan'',2,''python'',7]

print(l[0:]) # imprime desde elemento 0 hasta ?? pues al no indicar nada python lo toma hasta el

# ultimo

['hackchan', 2, 'python', 7]

print(l[2:])

[''python'', 7 ]

print(l[:3]) #aqui al no indicar inicio pues Python lo toma desde 0

['hackchan', 2, 'python']

Imprimo toda la lista una manera corta de hacerlo con el oerador [] :

print(l[:])

['hackchan', 2, 'python', 7]


Indico que utlize toda la lista :: y luego a dicha lista muestre los elementos con un salto de dos en dos:

print(l[::2])

['hackchan', 'python']


tambien podemos modificar los elementos o la fraccion de lista que indicamos asi:

>>>l[0:2]=[3,4]

ahora impriman la lista y veran lo que paso:

>>>print(l)

[3, 4, 'python', 7]

Si ven cambiamos los dos primeros elementos de la lista y eso fue porque l[0:2]=[''hackchan'',2] pues eso son los dos elementos que vamos ha cambiar por [3, 4 ] :D bueno espero que me hayan entendido ;) bueno esto que hicimos es un manejo a pedal de manejar listas pues python tiene una serie de funciones para su tratamiento y que veremos a continuacion para no crear un enredo de temas luego :)

veamos las sigiente funciones basicas para el manejo de listas:


append(object) Añade un objeto al final de la lista

digamos que tenemos:

>>>lista=[1,2,3,4,5,6,7]

>>>lista.append(7)

>>>print(lista)

[1, 2, 3, 4, 5, 6, 7, 7]


count(value) devuelve el numero de veces que se encontro value

>>>lista.count(7)

2


extend([iterable]) añada los elementos del iterable a la lista , hay que tener en cuenta que con el lo que hacemos es concatenar dos listas, haber veamos como funciona:


>>>lista.extend([8])

[1, 2, 3, 4, 5, 6, 7, 7,8]

>>>lista.extend([9,10,11,12,13])

[1, 2, 3, 4, 5, 6, 7, 7,8, 9, 10, 11, 12, 13 ]


insert (index, object ) inserta el objeto a la lista en la posiscion index veamos:

>>>lista.insert(0,10)

>>>print(lista)

[10, 1, 2, 3, 4, 5, 6, 7, 7,8, 9, 10, 11, 12, 13 ]


index( value[, start [, stop ]] ) Devuelve la posicion que encontro la primera ocurrencia de value(ya que un valor de una lista puede estar repetido eje: [1,2,2,3] tonces si mando a pedir la posicion de 2 index me va a devolver el indice del primer 2 que encuentre en este caso el indice es 1, si se especifica start y stop que son opcionales indicamos el inicio y el fin de la sublista.


>>>lista.index(10)

0

como ves aun que tenemos dos 10 en la lista uno en la posicion 0 y el otro en la posicion 11 index me devuelve el indice de la primera coincidencia encontrada en la lista.


pop(index) Devuelve el valor de la posicion index y lo elimina de la lista, si no se especifica la posicion, se utiliza el ultimo elemento de la lista


>>>lista.pop(10)

9

lo que hace pop es que elimina el elemento según el indice que le indique, como le pase el 10 ese indeice contiene el 9 lo muestra y queda eliminado


>>>print(lista)

[10, 1, 2, 3, 4, 5, 6, 7, 7,8, 10, 11, 12, 13 ]


si no indicamos indice a eliminar pues elimina el ultimo de la lista:


>>>lista.pop()

13

>>>print(lista)

[10, 1, 2, 3, 4, 5, 6, 7, 7,8, 10, 11, 12 ]



remove(value) eliminar la primera ocurrencia de value


>>>lista.remove(7)

>>>print(lista)

[10, 1, 2, 3, 4, 5, 6, 7, 8, 10, 11, 12]


>>>lista.remove(10)

>>>print(lista)

[1, 2, 3, 4, 5, 6, 7, 8, 10, 11, 12]


>>>lista.remove(12)

>>>print(lista)

[10, 1, 2, 3, 4, 5, 6, 7, 8, 10, 11 ]



reverse() invierte la lista. Esta funcion trabaja sobre la propia lista dede la que se invoca el metodo, no sobre una copia.

>>>lista.reverse()

>>>print(lista)

[11, 10, 8, 7, 6, 5, 4, 3, 2, 1]


para dejarla como estaba aplicamos otra ves reverse()


>>>lista.reverse()

>>>print(lista)

[1, 2, 3, 4, 5, 6, 7, 8, 10, 11]


45 comentarios:

  1. GENIAL, ahora que estoy empezando con python me ha venido estupendo.
    Muchas gracias te lo agradezco de corazon.
    Jose Angel

    ResponderEliminar
  2. hola me gustaria saber el manejo de split() con un ciclo grasias

    ResponderEliminar
    Respuestas
    1. from sys import stdin
      >
      >
      for line in stdin.readlines(): there is line to read
      pal = [str(x) for x in line.split()]
      lis.append(pal)

      for. con argumento para detenrse (False)
      pal = ..... Esta leyendo la linea aplica split() y guarda en pal
      lis.app..... Esto agrega pal a la colsa de lis: donde es list()

      Eliminar
  3. Está muy bien explicado gracias

    ResponderEliminar
  4. Gracias muy bien explicado!

    ResponderEliminar
  5. Excelente! Se entiende perfecto, gracias,.

    ResponderEliminar
  6. Me doy cuenta que desde febrero del 2009 tuvo origen este excelente tutorial, muy práctico y comprensible, y a la fecha sigue generando frutos. Te estas haciendo inmortal con este tutorial je je je. Me estaba complicando la existencia con un libro básico y gracias a Ti vine a comprender de mejor manera. Gracias en verdad por el tiempo, dedicación y disponibilidad que has tenido para permitirnos logros desde nuestros primeros pininos, logros que también son tuyos hermano.

    ResponderEliminar
  7. me gustaría plantear una duda, para eso es necesario ver el siguiente código:

    for i in range (0,1000)
    print i**2

    si no me equivoco python devolverá:
    0
    1
    4
    9
    16
    ...
    999**2
    ¿como puedo generar una lista con estos resultados? algo mas o menos así
    cuadrados = [0,1,4,9,16,...,999**2]
    Saludos.

    ResponderEliminar
    Respuestas
    1. Este comentario ha sido eliminado por el autor.

      Eliminar
    2. >>> lista = []
      >>> for i in range (0,10):
      lista.append(i**2)


      >>> lista
      [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

      Eliminar
  8. Listas por comprensión
    Una lista por comprensión (en inglés: list comprehension) es una expresión compacta para definir listas. Al igual que lambda, aparece en lenguajes funcionales. Ejemplos:
    >>> range(5) # La función "range" devuelve una lista, empezando en 0 y terminando con el número indicado menos uno
    [0, 1, 2, 3, 4]
    >>> [i*i for i in range(5)] # Por cada elemento del rango, lo multiplica por sí mismo y lo agrega al resultado
    [0, 1, 4, 9, 16]
    >>> lista = [(i, i + 2) for i in range(5)]
    >>> lista
    [(0, 2), (1, 3), (2, 4), (3, 5), (4, 6)]
    [editar]

    ResponderEliminar
  9. Como se pueden pasar los datos de una lista a imagen??

    ResponderEliminar
  10. nesesitaria que me mencionara cuale son los tipos de variables y como se coloca

    ResponderEliminar
  11. como se intriduce numeros en una lista vacia...

    ResponderEliminar
  12. gracias me sirvió de mucho

    ResponderEliminar
  13. Hola, cómo puedo hacer para usar los elementos extremos de una lista o arreglo como límites de un eje de mi gráfico?

    ResponderEliminar
  14. Sos genial, muchas gracias, la verdad no me gustan las listas, pero con este tutorial es superfacil y se le toma el gusto, te felecito

    ResponderEliminar
  15. GENIAL TE DESPIERTA LA MENTE

    ResponderEliminar
  16. tengo que hacer una practica la cual es de la siguiente manera:
    leer diez numeros e imprimir la posicion de todos los que terminan en 4.
    he durado todo un dia tratando de resolver eso.

    ResponderEliminar
  17. Muchas gracias, se agradece que expliquen con palabras sencillas y sin tantos tecnicismos, entendí todo.

    ResponderEliminar
  18. Otra forma de usar listas:
    index = 'Cuadrada'
    t = {'Triangular':1, 'Cuadrada':[1,2,3], 'Sierra':f(x)}
    print t[index]
    [1, 2, 3]
    si index = 'Sierra' mostrará los valores de la función f(x)

    ResponderEliminar
    Respuestas
    1. Esta forma se conoce como diccionario, es otro tipo de estructura de datos en python, y también es muy útil.

      Eliminar
  19. como ingresas variables???

    ResponderEliminar
  20. Lo siento amigo, no puedo... soy mala para todo lo que hago :(

    ResponderEliminar
  21. Hola Gracias por el Manual, ¿pregunta.
    tengo listas que contienen en su interior diccionarios lista = [{'1':'uno','2':'dos'},{'1':'uno','2':'dos'}]...

    como puedo ocupar la funcion "lista.index()" en una lista con estas caracterisitcas...

    de antemano muchas gracias

    ResponderEliminar
  22. buenas tardes como hago para copiar una lista de python

    ResponderEliminar
  23. hola necesito saber como determinar la posicion de un elemento en un vector

    ResponderEliminar
  24. hola, me llamo nelson y nescesito saber como guardar un dato en una lista, osea que el resultado que me arroje un codigo x , me lo guarde en una lista. porque despues tengo que comparar esos resultados osea tengo que comparar las listas.de ante mano muchas gracias....

    ResponderEliminar
  25. Pues no me funciona. Seré el mas tonto de todo el puto internet que lo hago igualito que en los manuales y no me funciona. Siempre el puto unicode del puto python. list.append(origen)
    TypeError: descriptor 'append' requires a 'list' object but received a 'unicode'
    Origen es un string que contiene una ruta. Hasta el arco de triunfo estoy del unicode en python

    ResponderEliminar
  26. hola me gustaria saber como mandar una definicion con un for

    ResponderEliminar
  27. Me puede alguien ayudar con este programa:
    Ejemplo:

    Introduzca su nombre y edad : Monika 16
    Introduzca su nombre y edad : Yinnet 18
    Introduzca su nombre y edad : Jhovanny 20

    El Promedio es = (16+18+20)/3 = 18
    Los mayores del promedio son:
    * Jhovanny con 20 años

    ResponderEliminar
    Respuestas
    1. Para una lista de N elementos, que pueda recibir los nombres y la edades de N personas que el usuario ingresa por el teclado. Luego, que imprima un listado con las personas y sus edades, siempre que la edad sea mayor al promedio de las edades introducidas.

      Ejemplo:

      Introduzca su nombre y edad : Monika 16
      Introduzca su nombre y edad : Yinnet 18
      Introduzca su nombre y edad : Jhovanny 20

      El Promedio es = (16+18+20)/3 = 18
      Los mayores del promedio son:
      * Jhovanny con 20 años

      Eliminar
  28. Grande men, justo lo que necesitaba, muchas gracias :)

    ResponderEliminar
  29. Mejore su ortografía, escribe como el culo

    ResponderEliminar
  30. La de arriba se la come toda

    ResponderEliminar
  31. Me gusta el banano

    ResponderEliminar