Друк елементів списку на відокремлених рядках у Python


84

Я намагаюся роздрукувати папки шляху 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

Відповіді:


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

(Зовнішні дужки включені для сумісності з Python 3 і зазвичай опускаються в Python 2.)


1
Я знаю, це не має значення для такого великого списку, але просто друк всередині циклу for забирає менше пам'яті і трохи простіше, ніж це.
utdemir

Як би ви це зробили у циклі for?
Ларрі,

2
@ Ларрі:for line in sys.path: print line
Катріель

4
py3: f = lambda *x: null; f( *( print( x ) for x in sys.path ) )- просто жартую ...
потік

57

Використовуйте функцію друку (Python 3.x) або імпортуйте її (Python 2.6+):

from __future__ import print_function

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

6
Ця відповідь найкраща під час друку списку, що містить нестрокові елементи.
BallpointBen

17

Ще одним хорошим варіантом роботи з таким варіантом є 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']
>>> 

4
якщо a = [1,3,5], тоді цей рядок буде друкувати цей масив лише в одному рядку ... чи є гарантований спосіб pprintйого друку на окремих рядках?
нонополярність

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


8

Відповідь Свена Марнаха - це в основному це, але є одна загальна проблема ... Вона не вдасться, якщо список, що друкується, не містить лише рядків.

Отже, більш загальна відповідь на тему "Як роздрукувати список з елементами, розділеними новими рядками" ...

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

Знову ж таки, підхід до функції друку, зазначає Дж. Бернардо, є вищим. Якщо ви можете, використання функції друку замість оператора друку майже завжди є гарною ідеєю.


1
Вам слід уникати використання розуміння списку там, де можна використовувати генераторський вираз, і ви точно можете використовувати його тут. Погляньте на цю відповідь . Ви отримаєте більше корисних посилань у цій відповіді, як ця
Sнаđошƒаӽ

1
@ Sнаđошƒаӽ не вірно в даному випадку, см stackoverflow.com/a/37782238/5320906
snakecharmerb

@snakecharmerb це добре знати. Велике спасибі за обмін!
Sнаđошƒаӽ

1

Використовуйте оператор 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])

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.