2011-04-21 32 views
5

Tengo una lista llena de direcciones IP. Me gustaría repetir la lista e imprimir cada dirección IP. Cuando intento hacer esto:Python: ¿Imprime una lista sin los corchetes y comillas simples?

def printList(theList): 
    for item in theList: 
     print item 

Y la salida se ve así:

['8.0.226.5'] 
['8.0.247.5'] 
['8.0.247.71'] 
['8.0.249.28'] 
['8.0.249.29'] 

He intentado todo, como "elemento de impresión [0]" en el bucle. ¿Qué estoy haciendo mal?

+9

¿De verdad? ¿Qué pasó cuando trataste 'print item [0]'? –

+0

IndexError: lista de índice fuera de rango – Dan

+3

¿Podría mostrarnos cómo es esta lista? –

Respuesta

6

Cada elemento de la lista es en sí mismo una lista única. No hay razón para esto: si no puede nombrar uno, vaya y elimínelos (usando re.find sobre re.findall o devolviendo un solo elemento de la lista devuelta por re.findall), son simplemente redundantes y causan problemas como en este caso .

Independientemente, print item[0] debería funcionar, ya que está imprimiendo el único elemento de la lista, ya diferencia de la str() de las listas, no se ejecutará el artículo a través repr primero (lo que hace que las cotizaciones y podría escapar caracteres no imprimibles si había alguna en la cadena). Y una vez que haya eliminado las listas de singleton redundantes, print '\n'.join(items) también funcionará.

Su código arroja un error si hay una lista vacía en theList. Si hay una línea en recentFile que no contiene nada formateado como una IP, se devolverá una lista vacía por returnIP, y si hay alguna línea en comparisonFile (por cierto: la abre con un nombre descriptivo al principio, pero abierto una y otra vez sin un nombre descriptivo en chechMatch) tampoco contiene una dirección IP, obtendrá otra lista vacía que, por supuesto, equivale a la lista vacía pasada como parámetro ip. Por lo tanto, para nombres que no sean IP en recentFile, se agregarán listas vacías. Se puede evitar todo este problema si devuelve cadenas en lugar de listas de singleton desde returnIP, use None cuando no haya IP en la línea actual, y omita la verificación/adición en compareFiles si returnIP devuelve None.

+0

Lo descubrí. Aparentemente en la parte superior de la lista tenía un artículo en blanco, por lo que se detenía allí. ¡Gracias por tu ayuda!Editar: No soy miembro, o te recomiendo :( – Dan

+0

@Dan: se agregó una explicación detallada de por qué sucede y sugerencias de cómo resolverlo. Un poco tarde, pero si algo ayuda ... :) – delnan

+0

¡Gracias! Para el asunto de CompareFile, en un principio estaba haciendo referencia a él, pero por alguna razón no funcionaría cuando usaba el nombre de la variable, así que traté de reemplazarlo con la función abierta en línea y funcionó bien. No estoy seguro de por qué sucedió esto. Podría intentar recrear el problema y tratar de resolverlo. – Dan

0

Creo que theList no es una lista de IP sino una lista de IP (cada uno de ellos con 1 elemento).

Otra causa del problema sería que tiene una clase IP con un método sobrescrito str que lo imprime así.

Cuestiones relacionadas