elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Security Series.XSS. [Cross Site Scripting]


+  Foro de elhacker.net
|-+  Programación
| |-+  Scripting
| | |-+  [python] Doble for con break
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: [python] Doble for con break  (Leído 3,484 veces)
kaiserr

Desconectado Desconectado

Mensajes: 242


constancia y dedicacion


Ver Perfil
[python] Doble for con break
« en: 30 Mayo 2014, 16:41 pm »

Hola a todos!

Hoy ataco con una nueva pregunta.
Tengo este codigo:
Código:
def main():

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

for path in lista:
aux = []
for nodo in path:
aux.append(nodo)
if aux.count(nodo) >= 2:
lista.remove(path)
break
      print lista

Es para eliminar sublistas con numeros repetidos de la lista. El problema esta que si tengo varias sublistas con numeros repetidos solo me elimina la primera. Esto sucede por el break que hay dentro de la condicion... pero, yo solo quiero salir del bucle interno :S

hay alguna otra sentencia que me lo permita hacer? o tendre que idear otra manera de hacer la funcion?

Saludos y gracias :)


« Última modificación: 30 Mayo 2014, 17:12 pm por kaiserr » En línea

Shell Root
Moderador Global
***
Desconectado Desconectado

Mensajes: 3.724


<3


Ver Perfil WWW
Re: [python] Doble for con break
« Respuesta #1 en: 30 Mayo 2014, 17:02 pm »

Espera ya lo vi bien ajjaja


En línea

Te vendería mi talento por poder dormir tranquilo.
kaiserr

Desconectado Desconectado

Mensajes: 242


constancia y dedicacion


Ver Perfil
Re: [python] Doble for con break
« Respuesta #2 en: 30 Mayo 2014, 17:11 pm »

Tambien he probado este codigo sin break, y me pasa lo mismo... asi que me he planteado que sea a causa del remove. Puede ser?

Código:
def main():
lista = [[3,2,1], [4,2,1], [5,2,3,2,1], [3,2,7,5,3,1]]

for path in lista:
aux = []
i = 0
fin = True

while i < len(path) and fin:
aux.append(path[i])
if aux.count(path[i]) >= 2:
lista.remove(path)
fin = False
i = i + 1
print lista
En línea

Shell Root
Moderador Global
***
Desconectado Desconectado

Mensajes: 3.724


<3


Ver Perfil WWW
Re: [python] Doble for con break
« Respuesta #3 en: 30 Mayo 2014, 17:39 pm »

El ultimo que pusiste remueve el "path" que tiene elementos repetidos, es decir,

lista original
Código:
[[3,2,1], [4,2,1], [5,2,3,2,1], [3,2,7,5,3,1]]

lista con path eliminado
Código:
[[3,2,1], [4,2,1], [         ], [3,2,7,5,3,1]]

Así que no elimines el path,
Código:
lista.remove(path)

Debes de remover el "nodo"
En línea

Te vendería mi talento por poder dormir tranquilo.
kaiserr

Desconectado Desconectado

Mensajes: 242


constancia y dedicacion


Ver Perfil
Re: [python] Doble for con break
« Respuesta #4 en: 30 Mayo 2014, 18:05 pm »

Primero de todo gracias por contestar tan rapido :)
Estoy implementando el algoritmo Astar y yo lo que necesito es eliminar la sublista entera.

Al final hice un pequeño truco para poder eliminarlo, os dejo el código para quien le interese. Aun asi, me gustaria saber porque al eliminar la sublista, el bucle ya no detecta las siguientes sublistas.

Código:
def main():
lista = [[3,2,1], [1,2,2,3,1], [4,2,1], [5,2,3,2,1], [3,2,7,5,3,1]]

temp = [] + lista
for path in lista:
aux = []
for nodo in path:
aux.append(nodo)
if aux.count(nodo) >= 2:
temp.remove(path)
break

lista = temp
print lista

Saludos!
En línea

Once

Desconectado Desconectado

Mensajes: 120


Ver Perfil WWW
Re: [python] Doble for con break
« Respuesta #5 en: 2 Junio 2014, 03:03 am »

Primero de todo gracias por contestar tan rapido :)
Estoy implementando el algoritmo Astar y yo lo que necesito es eliminar la sublista entera.

Al final hice un pequeño truco para poder eliminarlo, os dejo el código para quien le interese. Aun asi, me gustaria saber porque al eliminar la sublista, el bucle ya no detecta las siguientes sublistas.

Debe ser porque estas iterando y modificando al tiempo la misma lista. Se me ocurre que puedes usar el slicing para iterar una copia de la lista original y modificar la original y te puedes ahorrar el "pequeño truco".

Código
  1. def yop():
  2.    lista = [[3,2,1], [1,2,2,3,1], [4,2,1], [5,2,3,2,1], [3,2,7,5,3,1]]
  3.    for path in lista[:]:
  4.        for nodo in path:
  5.            if path.count(nodo) >= 2:
  6.                lista.remove(path)                
  7.                break
  8.    print lista

Saludos!
En línea

kaiserr

Desconectado Desconectado

Mensajes: 242


constancia y dedicacion


Ver Perfil
Re: [python] Doble for con break
« Respuesta #6 en: 4 Junio 2014, 02:07 am »

Gracias 11Sep :)
Entregue el trabajo con el truquillo jaja pero para la proxima lo tendre en cuenta.
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Firma Prison Break
Diseño Gráfico
darso 2 3,543 Último mensaje 3 Noviembre 2007, 16:00 pm
por darso
[python] calcular impar y su doble. « 1 2 »
Scripting
Meta 12 16,485 Último mensaje 2 Octubre 2010, 22:20 pm
por Meta
Sobre el uso de break y continue. « 1 2 »
Programación General
RyogiShiki 13 6,519 Último mensaje 22 Mayo 2012, 09:07 am
por Saberuneko
Error al meter break en una funcion if | Python
Scripting
TheIllusionist 3 2,971 Último mensaje 20 Marzo 2017, 14:13 pm
por TheIllusionist
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines