Drucken von Listenelementen in getrennten Zeilen in Python

84

Ich versuche, Python-Pfadordner folgendermaßen auszudrucken:

import sys
print sys.path

Die Ausgabe ist wie folgt:

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

Wie drucke ich sie in separate Zeilen, damit ich sie richtig analysieren kann?

Es sollte so sein:

/usr/bin
/home/student/Desktop
/home/student/my_modules
etc
Larry
quelle
1
Warum müssen Sie sie analysieren? Sind sie nicht schon eine Liste?
SingleNegationElimination

Antworten:

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

(Die äußeren Klammern sind aus Gründen der Python 3-Kompatibilität enthalten und werden in Python 2 normalerweise weggelassen.)

Sven Marnach
quelle
1
Ich weiß, es spielt keine Rolle für diese Liste, aber nur das Drucken in einer for-Schleife verbraucht weniger Speicher und ist etwas einfacher.
utdemir
Wie würden Sie es in einer for-Schleife machen?
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 ) )- nur ein Scherz ...
Flow
56

Verwenden Sie die Druckfunktion (Python 3.x) oder importieren Sie sie (Python 2.6+):

from __future__ import print_function

print(*sys.path, sep='\n')
JBernardo
quelle
6
Diese Antwort ist am besten geeignet, wenn Sie eine Liste mit Nicht-String-Elementen drucken.
BallpointBen
17

Eine weitere gute Option für diese Art von Option ist das pprintModul, das (unter anderem) lange Listen mit einem Element pro Zeile hübsch druckt:

>>> 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
quelle
4
Wenn a = [1,3,5], dann druckt diese Zeile dieses Array nur in einer Zeile. Gibt es eine garantierte Möglichkeit pprint, es in separaten Zeilen zu drucken?
Unpolarität
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
quelle
8

Sven Marnach's Antwort ist so ziemlich alles, hat aber ein allgemeines Problem ... Es wird fehlschlagen, wenn die gedruckte Liste nicht nur Zeichenfolgen enthält.

Also, die allgemeinere Antwort auf "Wie man eine Liste mit durch Zeilenumbrüche getrennten Elementen druckt" ...

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

Andererseits ist der Druckfunktionsansatz, auf den JBernardo hinweist, überlegen. Wenn Sie können, ist es fast immer eine gute Idee, die Druckfunktion anstelle der Druckanweisung zu verwenden.

travc
quelle
1
Sie sollten das Listenverständnis vermeiden, wenn ein Generatorausdruck verwendet werden kann, und Sie können hier definitiv einen verwenden. Schauen Sie sich diese Antwort an . Sie werden weitere nützliche Links in dieser Antwort erhalten, wie diese
Sнаđошƒаӽ
1
@ Sнаđошƒаӽ in diesem Fall nicht wahr, siehe stackoverflow.com/a/37782238/5320906
snakecharmerb
@ Snakecharmerb es ist gut zu wissen. Vielen Dank für das Teilen!
Sнаđошƒаӽ
1

Verwenden Sie den Splat-Operator (*).

Standardmäßig druckt der Operator * eine durch Leerzeichen getrennte Liste. Verwenden Sie den sepOperator, um das Trennzeichen anzugeben

print(*sys.path, sep = "\n")
Gautam Jagdhish
quelle
1
Dies ist der neue und clevere Weg, dies zu tun! Viel besser als die verwirrenden und ausführlichen Lambdas oder Map / Joins . Das "Splat" wird hier besser erklärt .
not2qubit
0

sys.path gibt die Liste der Pfade zurück

ref

sys.path

Eine Liste von Zeichenfolgen, die den Suchpfad für Module angibt. Initialisiert aus der Umgebungsvariablen PYTHONPATH sowie einem installationsabhängigen Standard.

Wie beim Programmstart initialisiert, ist das erste Element dieser Liste, Pfad [0], das Verzeichnis, das das Skript enthält, mit dem der Python-Interpreter aufgerufen wurde. Wenn das Skriptverzeichnis nicht verfügbar ist (z. B. wenn der Interpreter interaktiv aufgerufen wird oder wenn das Skript aus der Standardeingabe gelesen wird), ist Pfad [0] die leere Zeichenfolge, die Python anweist, zuerst Module im aktuellen Verzeichnis zu suchen. Beachten Sie, dass das Skriptverzeichnis vor den Einträgen eingefügt wird, die als Ergebnis von PYTHONPATH eingefügt wurden .

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

oder Sie können nur den ersten Pfad von drucken

print(dir[0])

Suman Saurabh
quelle