Autor
|
Tema: [python] Doble for con break (Leído 3,484 veces)
|
kaiserr
Desconectado
Mensajes: 242
constancia y dedicacion
|
Hola a todos! Hoy ataco con una nueva pregunta. Tengo este codigo: 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
|
Espera ya lo vi bien ajjaja
|
|
|
En línea
|
Te vendería mi talento por poder dormir tranquilo.
|
|
|
kaiserr
Desconectado
Mensajes: 242
constancia y dedicacion
|
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? 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
|
El ultimo que pusiste remueve el "path" que tiene elementos repetidos, es decir, lista original [[3,2,1], [4,2,1], [5,2,3,2,1], [3,2,7,5,3,1]] lista con path eliminado [[3,2,1], [4,2,1], [ ], [3,2,7,5,3,1]] Así que no elimines el path, Debes de remover el "nodo"
|
|
|
En línea
|
Te vendería mi talento por poder dormir tranquilo.
|
|
|
kaiserr
Desconectado
Mensajes: 242
constancia y dedicacion
|
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.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
|
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". def yop(): lista = [[3,2,1], [1,2,2,3,1], [4,2,1], [5,2,3,2,1], [3,2,7,5,3,1]] for path in lista[:]: for nodo in path: if path.count(nodo) >= 2: lista.remove(path) break print lista
Saludos!
|
|
|
En línea
|
|
|
|
kaiserr
Desconectado
Mensajes: 242
constancia y dedicacion
|
Gracias 11Sep Entregue el trabajo con el truquillo jaja pero para la proxima lo tendre en cuenta.
|
|
|
En línea
|
|
|
|
|
|