Печать элементов списка на отдельных строках в Python

87

Я пытаюсь распечатать папки пути Python, используя это:

import sys
print sys.path

Результат такой:

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

Как мне распечатать их в отдельные строки, чтобы я мог правильно их проанализировать?

Должно получиться так:

/usr/bin
/home/student/Desktop
/home/student/my_modules
etc
Ларри
источник
1
зачем вам их разбирать. разве это не список?
SingleNegationElimination

Ответы:

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

(Внешние скобки включены для совместимости с Python 3 и обычно опускаются в Python 2.)

Свен Марнах
источник
1
Я знаю, это не имеет значения для списка такого размера, но простая печать внутри цикла for потребляет меньше памяти и немного проще, чем это.
утдемир
Как бы вы это сделали в цикле for?
Ларри
2
@Larry:for line in sys.path: print line
Катриэль
4
py3: f = lambda *x: null; f( *( print( x ) for x in sys.path ) )- шучу ...
flow
60

Используйте функцию печати (Python 3.x) или импортируйте ее (Python 2.6+):

from __future__ import print_function

print(*sys.path, sep='\n')
JBernardo
источник
6
Этот ответ лучше всего подходит при печати списка, содержащего нестроковые элементы.
BallpointBen
19

Еще один хороший вариант для работы с такими опциями - это pprintмодуль, который (помимо прочего) прекрасно печатает длинные списки с одним элементом в строке:

>>> 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
источник
4
если a = [1,3,5], то эта строка будет печатать этот массив только в одной строке ... есть ли гарантированный способ pprintраспечатать его в отдельных строках?
неполярность
1
@ 太極 者 無極 而 生pprint.pprint(x,width=max([len(str(s)) for s in x])+3)
ttb
16
for path in sys.path:
    print path
Уинстон Эверт
источник
8

Ответ Свена Марнака в значительной степени таков, но имеет одну проблему общего характера ... Он потерпит неудачу, если печатаемый список не просто содержит строки.

Итак, более общий ответ на вопрос «Как распечатать список с элементами, разделенными символами новой строки» ...

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

С другой стороны, JBernardo отмечает, что функция печати лучше. Если вы можете, использование функции печати вместо оператора печати почти всегда является хорошей идеей.

Travc
источник
1
Вам следует избегать использования понимания списков, когда можно использовать выражение генератора, и вы определенно можете использовать его здесь. Взгляните на этот ответ . В этом ответе вы
найдете
1
@ Sнаđошƒаӽ не верно в данном случае, см stackoverflow.com/a/37782238/5320906
snakecharmerb
@snakecharmerb, это полезно знать. Большое спасибо за то, что поделились!
Sнаđошƒаӽ
2

Используйте оператор splat (*)

По умолчанию оператор * выводит список через пробел. Используйте sepоператор, чтобы указать разделитель

print(*sys.path, sep = "\n")
Гаутам Джагдхиш
источник
1
Это новый и разумный способ сделать это! Намного лучше, чем использовать запутанные и подробные лямбды или map / joins . «Восклицательный знак» объясняется лучше здесь .
not2qubit
0

sys.path возвращает список путей

ссылка

sys.path

Список строк, определяющих путь поиска модулей. Инициализируется из переменной среды PYTHONPATH плюс значение по умолчанию, зависящее от установки.

Как инициализируется при запуске программы, первый элемент этого списка, путь [0], - это каталог, содержащий сценарий, который использовался для вызова интерпретатора Python. Если каталог сценария недоступен (например, если интерпретатор вызывается в интерактивном режиме или если сценарий читается со стандартного ввода), путь [0] является пустой строкой, которая направляет Python на поиск модулей в текущем каталоге в первую очередь. Обратите внимание, что каталог сценария вставлен перед записями, вставленными в результате PYTHONPATH .

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

или вы можете распечатать только первый путь

print(dir[0])

Суман Саураб
источник