Drukowanie elementów listy w oddzielnych wierszach w Pythonie

88

Próbuję wydrukować foldery ścieżek Pythona za pomocą tego:

import sys
print sys.path

Wynik jest taki:

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

Jak wydrukować je w osobnych wierszach, aby móc je poprawnie przeanalizować?

Powinno wyglądać tak:

/usr/bin
/home/student/Desktop
/home/student/my_modules
etc
Larry
źródło
1
dlaczego musisz je analizować. czy nie są już listą?
SingleNegationElimination

Odpowiedzi:

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

(Zewnętrzne nawiasy są uwzględnione w celu zapewnienia zgodności z Pythonem 3 i zwykle są pomijane w Pythonie 2).

Sven Marnach
źródło
1
Wiem, nie ma to znaczenia w przypadku listy o takiej wielkości, ale samo drukowanie wewnątrz pętli for zajmuje mniej pamięci i jest nieco prostsze niż to.
utdemir
Jak byś to zrobił w pętli 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 ) )- tylko żartuję ...
przypływ
61

Użyj funkcji drukowania (Python 3.x) lub zaimportuj ją (Python 2.6+):

from __future__ import print_function

print(*sys.path, sep='\n')
JBernardo
źródło
6
Ta odpowiedź jest najlepsza w przypadku drukowania listy zawierającej elementy niebędące łańcuchami.
BallpointBen
19

Inną dobrą opcją do obsługi tego rodzaju opcji jest pprintmoduł, który (między innymi) ładnie drukuje długie listy z jednym elementem w wierszu:

>>> 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
źródło
4
jeśli a = [1,3,5], to ta linia wypisze tę tablicę tylko w jednym wierszu ... czy istnieje gwarantowany sposób pprintwydrukowania jej w oddzielnych wierszach?
nonopolarity
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
źródło
8

Odpowiedź Svena Marnacha jest prawie taka, ale ma jeden ogólny problem ... Nie powiedzie się, jeśli drukowana lista nie zawiera tylko ciągów.

Tak więc ogólniejsza odpowiedź brzmi: „Jak wydrukować listę z elementami oddzielonymi znakami nowej linii” ...

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

Z drugiej strony podejście do funkcji drukowania, które JBernardo wskazuje, jest lepsze. Jeśli możesz, użycie funkcji print zamiast instrukcji print jest prawie zawsze dobrym pomysłem.

travc
źródło
1
Powinieneś unikać używania list składanych, gdzie można użyć wyrażenia generatora, a na pewno możesz użyć tutaj. Spójrz na tę odpowiedź . Otrzymasz więcej przydatnych linków w tej odpowiedzi, takiej jak ta
Sнаđошƒаӽ
1
@ Sнаđошƒаӽ nieprawda w tym przypadku, patrz stackoverflow.com/a/37782238/5320906
snakecharmerb
@snakecharmerb, dobrze wiedzieć. Wielkie dzięki za udostępnienie!
Sнаđошƒаӽ
2

Użyj operatora splat (*)

Domyślnie operator * wyświetla listę oddzieloną spacjami. Użyj sepoperatora, aby określić separator

print(*sys.path, sep = "\n")
Gautam Jagdhish
źródło
1
To nowy i sprytny sposób na zrobienie tego! O wiele lepsze niż używanie mylących i rozwlekłych lambda lub map / joins . „Splat” jest tu lepiej wyjaśniony .
not2qubit
0

sys.path zwraca listę ścieżek

ref

sys.path

Lista ciągów, która określa ścieżkę wyszukiwania modułów. Zainicjowane ze zmiennej środowiskowej PYTHONPATH oraz wartości domyślnej zależnej od instalacji.

Zgodnie z inicjalizacją podczas uruchamiania programu, pierwsza pozycja na tej liście, ścieżka [0], jest katalogiem zawierającym skrypt, który został użyty do wywołania interpretera Pythona. Jeśli katalog skryptu nie jest dostępny (np. Jeśli interpreter jest wywoływany interaktywnie lub jeśli skrypt jest czytany ze standardowego wejścia), ścieżka [0] jest pustym ciągiem, który kieruje Pythona do wyszukiwania modułów w bieżącym katalogu w pierwszej kolejności. Zwróć uwagę, że katalog skryptów jest wstawiany przed wpisami wstawionymi jako wynik PYTHONPATH .

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

lub możesz wydrukować tylko pierwszą ścieżkę przez

print(dir[0])

Suman Saurabh
źródło