在Python中分隔行上打印列表元素

Lar*_*rry 73 python

我正在尝试使用以下方法打印出Python路径文件夹:

import sys
print sys.path
Run Code Online (Sandbox Code Playgroud)

输出是这样的:

>>> 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']
Run Code Online (Sandbox Code Playgroud)

如何将它们打印成单独的行,以便我可以正确解析它们?

它应该是这样的:

/usr/bin
/home/student/Desktop
/home/student/my_modules
etc
Run Code Online (Sandbox Code Playgroud)

Sve*_*ach 146

print("\n".join(sys.path))
Run Code Online (Sandbox Code Playgroud)

(外部括号包含在Python 3兼容性中,通常在Python 2中省略.)

  • py3:`f = lambda*x:null; f(*(在sys.path中用于x的print(x)))` - 只是在开玩笑...... (3认同)
  • @Larry:`for sys.path中的行:print line` (2认同)

JBe*_*rdo 40

使用print函数(Python 3.x)或导入它(Python 2.6+):

from __future__ import print_function

print(*sys.path, sep='\n')
Run Code Online (Sandbox Code Playgroud)

  • 打印包含非字符串元素的列表时,此答案最佳. (3认同)

Win*_*ert 16

for path in sys.path:
    print path
Run Code Online (Sandbox Code Playgroud)


Sin*_*ion 14

处理这种选项的另一个好方法是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']
>>> 
Run Code Online (Sandbox Code Playgroud)

  • 如果`a = [1,3,5]`,那么该行只会在一行中打印出这个数组...是否有保证`pprint`在单独的行上打印它? (3认同)

小智 12

使用splat 运算符 ( *)

默认情况下,print打印由空格分隔的参数。使用sep参数指定分隔符:

print(*sys.path, sep="\n")
Run Code Online (Sandbox Code Playgroud)

  • 这与 [this](/sf/answers/431785231/) 2011 年的答案有何不同? (2认同)

tra*_*avc 7

Sven Marnach的回答几乎就是它,但有一个普遍性问题......如果打印的列表不仅包含字符串,它将失败.

那么,对于"如何打印带有换行符分隔的元素的列表"的更一般的答案......

print '\n'.join([ str(myelement) for myelement in mylist ])
Run Code Online (Sandbox Code Playgroud)

然后,JBernardo指出的打印功能方法更胜一筹.如果可以的话,使用print函数而不是print语句几乎总是一个好主意.

  • @Sнаđошςа׽ 在这种情况下不正确,请参阅/sf/answers/2644756691/ (2认同)