Impresión de elementos de lista en líneas separadas en Python

84

Estoy tratando de imprimir carpetas de ruta de Python usando esto:

import sys
print sys.path

La salida es así:

>>> print sys.path
['.', '/usr/bin', '/home/student/Desktop', '/home/student/my_modules', '/usr/lib/pyth
on2.6', '/usr/lib/python2.6/plat-linux2', '/usr/lib/python2.6/lib-tk', '/usr/lib/pyth
on2.6/lib-old', '/usr/lib/python2.6/lib-dynload', '/usr/local/lib/python2.6/dist-pack
ages', '/usr/lib/python2.6/dist-packages', '/usr/lib/python2.6/dist-packages/PIL', '/
usr/lib/python2.6/dist-packages/gst-0.10', '/usr/lib/pymodules/python2.6', '/usr/lib/
python2.6/dist-packages/gtk-2.0', '/usr/lib/pymodules/python2.6/gtk-2.0', '/usr/lib/p
ython2.6/dist-packages/wx-2.8-gtk2-unicode']

¿Cómo los imprimo en líneas independientes para poder analizarlos correctamente?

Debería ser así:

/usr/bin
/home/student/Desktop
/home/student/my_modules
etc
Larry
fuente
1
¿Por qué necesita analizarlos? ¿no son ya una lista?
SingleNegationElimination

Respuestas:

170
print("\n".join(sys.path))

(Los paréntesis externos se incluyen para compatibilidad con Python 3 y generalmente se omiten en Python 2).

Sven Marnach
fuente
1
Lo sé, no importa para esa lista de tamaño, pero solo imprimir dentro de un bucle for consume menos memoria y es un poco más simple que esto.
utdemir
¿Cómo lo harías en un bucle for?
Larry
2
@Larry:for line in sys.path: print line
Katriel
4
py3: f = lambda *x: null; f( *( print( x ) for x in sys.path ) )- solo bromeaba ...
flujo
57

Utilice la función de impresión (Python 3.x) o impórtela (Python 2.6+):

from __future__ import print_function

print(*sys.path, sep='\n')
JBernardo
fuente
6
Esta respuesta es mejor cuando se imprime una lista que contiene elementos que no son cadenas.
BallpointBen
17

Otra buena opción para manejar este tipo de opciones es el pprintmódulo, que (entre otras cosas) imprime bastante listas largas con un elemento por línea:

>>> import sys
>>> import pprint
>>> pprint.pprint(sys.path)
['',
 '/usr/lib/python27.zip',
 '/usr/lib/python2.7',
 '/usr/lib/python2.7/plat-linux2',
 '/usr/lib/python2.7/lib-tk',
 '/usr/lib/python2.7/lib-old',
 '/usr/lib/python2.7/lib-dynload',
 '/usr/lib/python2.7/site-packages',
 '/usr/lib/python2.7/site-packages/PIL',
 '/usr/lib/python2.7/site-packages/gst-0.10',
 '/usr/lib/python2.7/site-packages/gtk-2.0',
 '/usr/lib/python2.7/site-packages/setuptools-0.6c11-py2.7.egg-info',
 '/usr/lib/python2.7/site-packages/webkit-1.0']
>>> 
SingleNegationElimination
fuente
4
si a = [1,3,5], entonces esa línea solo imprimirá esta matriz en una línea ... ¿hay una forma garantizada de pprintimprimirla en líneas separadas?
nopolaridad
1
@ 太極 者 無極 而 生pprint.pprint(x,width=max([len(str(s)) for s in x])+3)
ttb
16
for path in sys.path:
    print path
Winston Ewert
fuente
8

La respuesta de Sven Marnach es más o menos eso, pero tiene un problema de generalidad ... Fallará si la lista que se imprime no solo contiene cadenas.

Entonces, la respuesta más general a "Cómo imprimir una lista con elementos separados por líneas nuevas" ...

print '\n'.join([ str(myelement) for myelement in mylist ])

Por otra parte, el enfoque de la función de impresión que señala JBernardo es superior. Si puede, usar la función de impresión en lugar de la declaración de impresión es casi siempre una buena idea.

travc
fuente
1
Debe evitar usar la comprensión de listas donde se puede usar una expresión generadora, y definitivamente puede usar una aquí. Eche un vistazo a esta respuesta . Obtendrá enlaces más útiles en esa respuesta, como este
Sнаđошƒаӽ
1
@ Sнаđошƒаӽ no es cierto en este caso, consulte stackoverflow.com/a/37782238/5320906
snakecharmerb
@snakecharmerb es bueno saberlo. ¡Muchas gracias por compartir!
Sнаđошƒаӽ
1

Utilice el operador de splat (*)

De forma predeterminada, el operador * imprime la lista separada por espacios. Utilice el sepoperador para especificar el delimitador

print(*sys.path, sep = "\n")
Gautam Jagdhish
fuente
1
¡Esta es la nueva e inteligente forma de hacerlo! Mucho mejor que usar lambda s confusos y detallados o map / joins . El "splat" se explica mejor aquí .
not2qubit
0

sys.path devuelve la lista de rutas

árbitro

sys.path

Una lista de cadenas que especifica la ruta de búsqueda de módulos. Inicializado desde la variable de entorno PYTHONPATH , más un valor predeterminado que depende de la instalación.

Como se inicializó al iniciar el programa, el primer elemento de esta lista, ruta [0], es el directorio que contiene el script que se utilizó para invocar al intérprete de Python. Si el directorio del script no está disponible (por ejemplo, si el intérprete se invoca de forma interactiva o si el script se lee desde la entrada estándar), la ruta [0] es la cadena vacía, que indica a Python que busque módulos en el directorio actual primero. Observe que el directorio de secuencias de comandos se inserta antes de las entradas insertadas como resultado de PYTHONPATH .

import sys
dirs=sys.path
for path in dirs:
   print(path)

o puede imprimir solo la primera ruta por

print(dir[0])

Suman Saurabh
fuente