Stampa gli elementi dell'elenco su righe separate in Python


87

Sto cercando di stampare le cartelle del percorso di Python usando questo:

import sys
print sys.path

L'output è così:

>>> 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']

Come faccio a stamparli in righe separate per analizzarli correttamente?

Dovrebbe essere così:

/usr/bin
/home/student/Desktop
/home/student/my_modules
etc

1
perché hai bisogno di analizzarli. non sono già un elenco?
SingleNegationElimination

Risposte:


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

(Le parentesi esterne sono incluse per la compatibilità con Python 3 e sono generalmente omesse in Python 2.)


1
Lo so, non importa per quella lista di dimensioni, ma la semplice stampa all'interno di un ciclo for consuma meno memoria e leggermente più semplice di questa.
utdemir

Come lo faresti in un ciclo 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 ) )- sto scherzando ...
flusso

60

Usa la funzione di stampa (Python 3.x) o importala (Python 2.6+):

from __future__ import print_function

print(*sys.path, sep='\n')

6
Questa risposta è migliore quando si stampa un elenco contenente elementi non stringa.
Ballpoint

19

Un'altra buona opzione per gestire questo tipo di opzione è il pprintmodulo, che (tra le altre cose) stampa piuttosto lunghi elenchi con un elemento per riga:

>>> 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']
>>> 

4
se a = [1,3,5], allora quella riga stamperà questo array solo in una riga ... esiste un modo garantito per pprintstamparlo su righe separate?
nonopolarità

1
@ 太極 者 無極 而 生pprint.pprint(x,width=max([len(str(s)) for s in x])+3)
ttb


8

La risposta di Sven Marnach è praticamente così, ma ha un problema di generalità ... Non funzionerà se l'elenco stampato non contiene solo stringhe.

Quindi, la risposta più generale a "Come stampare un elenco con elementi separati da nuove righe" ...

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

Inoltre, l'approccio alla funzione di stampa che JBernardo sottolinea è superiore. Se puoi, usare la funzione print invece dell'istruzione print è quasi sempre una buona idea.


1
Dovresti evitare di usare la comprensione dell'elenco in cui è possibile utilizzare un'espressione del generatore e puoi sicuramente usarne una qui. Dai un'occhiata a questa risposta . Otterrai link più utili in quella risposta, come questa
Sнаđошƒаӽ

1
@ Sнаđошƒаӽ non vero in questo caso, vedere stackoverflow.com/a/37782238/5320906
snakecharmerb

@snakecharmerb è buono a sapersi. Grazie mille per la condivisione!
Sнаđошƒаӽ

2

Usa l'operatore splat (*)

Per impostazione predefinita, l'operatore * stampa l'elenco separato da uno spazio. Usa l' sepoperatore per specificare il delimitatore

print(*sys.path, sep = "\n")

1
Questo è il modo nuovo e intelligente per farlo! Molto meglio che usare lambda confusi e dettagliati o map / join . Lo "splat" è spiegato meglio qui .
not2qubit

0

sys.path restituisce l'elenco dei percorsi

rif

sys.path

Un elenco di stringhe che specifica il percorso di ricerca dei moduli. Inizializzato dalla variabile di ambiente PYTHONPATH , più un valore predefinito dipendente dall'installazione.

Come inizializzato all'avvio del programma, il primo elemento di questo elenco, percorso [0], è la directory contenente lo script che è stato utilizzato per invocare l'interprete Python. Se la directory dello script non è disponibile (ad es. Se l'interprete viene invocato in modo interattivo o se lo script viene letto dallo standard input), path [0] è la stringa vuota, che indica a Python di cercare prima i moduli nella directory corrente. Si noti che la directory degli script viene inserita prima delle voci inserite come risultato di PYTHONPATH .

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

oppure puoi stampare solo il primo percorso di

print(dir[0])

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.