[Python-es] Duda sobre listas de listas

Victoriano Navarro Aguilar vitiman en gmail.com
Mie Mar 13 11:05:35 CET 2013


Hola Rafael,

Si no he entendido mal la idea es eliminar las ocurrencias de una lista de
listas, no?

A ver si esto te sirve

>>> import itertools
>>> links=[[u'00:00:00:1b:11:b4:16:80,1', u'00:00:00:02:44:a9:b5:34,1'],
[u'00:00:00:02:44:a9:b5:34,1', u'00:00:00:1b:11:b4:16:80,1']]
>>> chain = itertools.chain(*links)
>>> the_list = list(chain)
[u'00:00:00:1b:11:b4:16:80,1',
 u'00:00:00:02:44:a9:b5:34,1',
 u'00:00:00:02:44:a9:b5:34,1',
 u'00:00:00:1b:11:b4:16:80,1']
>>> set(the_list)
set([u'00:00:00:1b:11:b4:16:80,1', u'00:00:00:02:44:a9:b5:34,1'])

También lo puedes hacer la lista que recibes en modo "flattened":
http://stackoverflow.com/questions/2158395/flatten-an-irregular-list-of-lists-in-python

Échale un ojo al módulo itertools que te salva la vida en muchas ocasiones.

Saludos.





El 13 de marzo de 2013 10:36, Rafael Gomes <rggg88 en hotmail.com> escribió:

> Buenos Dias amigos,
> Como estan?
> Espero que bien.
>
> Disculpen molestar, pero yo soy nuevo en el lenguaje python y luego de
> hacer unos tutoriales que encontre en internet asi como otras informaciones
> que he visto aqui en la lista he tratado avanzar y ir buscar informaciones
> que se encuentran en la mini red utilizada donde trabajo.
>
> Es asi yo hago un pedido curl para el servidor y obtengo la lista de
> maquinas que estan conectadas a mi red en uno de los siguientes formatos:
>
> [[u'00:00:00:02:44:a9:b5:34', 1, u'00:00:00:1b:11:b4:16:80', 1],
> [u'00:00:00:1b:11:b4:16:80', 1, u'00:00:00:02:44:a9:b5:34', 1]]
>
> Solo que la informacion viene en una lista de lista y viene repetida pero
> en orden contrária y queria eliminar la repeticion. Ya lei sobre los set
> pero no da para utilizar en una lista de lista que no es hashable. Ya trate
> algunas experimentaciones con for e if, como por ejemplo:
>
> a=[[u'00:00:00:02:44:a9:b5:34', 1, u'00:00:00:1b:11:b4:16:80', 1],
> [u'00:00:00:1b:11:b4:16:80', 1, u'00:00:00:02:44:a9:b5:34', 1]]
> nova_l=[]
>
> for elem in a:
>         if elem not in nova_l:
>                 nova_l.append(elem)
>                 k = nova_l
>                 print a
>
> Pero no consigo quedar solo con los dos primeros o los segundos valores.
>
> Otra forma que pensei para recebir la informacion fue esta:
> [u'00:00:00:1b:11:b4:16:80,1', u'00:00:00:02:44:a9:b5:34,1'],
> [u'00:00:00:02:44:a9:b5:34,1', u'00:00:00:1b:11:b4:16:80,1']]
>
> Y trate de utilizar este codigo a ver si daba:
>
> import string
>
> switch=[[u'00:00:00:1b:11:b4:16:80'], [u'00:00:00:02:44:a9:b5:34']]
>
> links=[[u'00:00:00:1b:11:b4:16:80,1', u'00:00:00:02:44:a9:b5:34,1'],
> [u'00:00:00:02:44:a9:b5:34,1', u'00:00:00:1b:11:b4:16:80,1']]
> port_link_list=[]
> t=len(links)
> for i in range(t):
>         for elem in links[i]:
>                 if elem.split(',')[0]==switch[i]:
>                         port = elem.split(',')[1]
>                         if port not in port_link_list:
>                                 port_link_list.append(elem.split(',')[1])
> print port_link_list
>
> Mi idea es conseguir que la nueva lista quede de la siguiente forma:
>
> [[u'00:00:00:02:44:a9:b5:34', 1],[u'00:00:00:1b:11:b4:16:80', 1]]
>
> Si me pudiesen ayudar y decir que estoy haciendo mal, disculpen mi
> ignorancia.
>
> Ya ahora tengo otra duda, si tambien me pueden ayudar.
>
> Suponiendo que quedo con la informacion de la manera anterior, o sea como
> quiero. Quiero filtrar los valores que tengo en una lista en relacion a
> esta. La otra lista tiene el siguiente formato:
>
> lista1⁼[[u'00:00:00:02:44:a9:b5:34', 1],[u'00:00:00:1b:11:b4:16:80', 1]]
> lista2=[[u'00:00:00:1b:11:b4:16:80,65534', u'00:1b:11:b4:16:80'],
> [u'00:00:00:1b:11:b4:16:80,1', u'00:1b:11:b4:16:80'],
> [u'00:00:00:02:44:a9:b5:34,65534', u'00:02:44:a9:b5:34'],
> [u'00:00:00:02:44:a9:b5:34,1', u'00:02:44:a9:b5:34']]
>
> Mi idea aqui es hacer dos for en que comparo la primera posicion de la
> lista 1 con la primera posicion de la lista 2 asi como la segunda coluna de
> la lista 1 de cada linea con la segunda coluna de la lista 2 y hago el
> filtraje. Queria saber si estoy pensando bien o no.
>
> Muchas gracias por toda vuestra ayuda.
> Disculpen el  incomodo.
>
> Saludos,
> Rafael Gomes
>
> _______________________________________________
> Python-es mailing list
> Python-es en python.org
> http://mail.python.org/mailman/listinfo/python-es
> FAQ: http://python-es-faq.wikidot.com/
>
>


-- 
Victoriano Navarro Aguilar - (vitiman en gmail.com)
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://mail.python.org/pipermail/python-es/attachments/20130313/5da2deb2/attachment.html>


Más información sobre la lista de distribución Python-es