在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 2011年

Answers:


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

(为了与Python 3兼容,包含了外部括号,而在Python 2中通常省略了。)


1
我知道,该大小列表无关紧要,但是仅在for循环内进行打印会消耗更少的内存,并且比这要简单一些。
utdemir 2011年

您将如何在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将其打印在单独的行上?
nonopolarity

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


8

斯文·马纳赫(Sven Marnach)的答案差不多,但是有一个普遍性问题……如果要打印的列表不仅仅包含字符串,它将失败。

因此,对“如何打印出用换行符分隔的元素的列表”的更一般的答案...

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

再一次,JBernardo指出的打印功能方法是优越的。如果可以的话,使用打印功能代替打印语句几乎总是一个好主意。


1
您应该避免在可以使用生成器表达式的地方使用列表理解,并且绝对可以在此处使用一个。看看这个答案。你会得到更多有用的链接在这个问题的答案,像这一个
Sнаđошƒаӽ

1
@Sнаđошƒаӽ在这种情况下不正确,请参见stackoverflow.com/a/37782238/5320906
snakecharmerb

@snakecharmerb很高兴知道。非常感谢分享!
Sнаđошƒаӽ

1

使用splat运算符(*)

默认情况下,*运算符将打印以空格分隔的列表。使用sep运算符指定分隔符

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

1
这是新的,聪明的方法!比使用令人困惑和冗长的lambdamap / joins好得多。这里会更好地解释“ splat” 。
not2qubit

0

sys.path返回路径列表

参考

系统路径

字符串列表,用于指定模块的搜索路径。从环境变量PYTHONPATH初始化,再加上与安装有关的默认值。

在程序启动时进行初始化,该列表的第一项path [0]是包含用于调用Python解释器的脚本的目录。如果脚本目录不可用(例如,如果以交互方式调用解释器或从标准输入中读取脚本),则path [0]为空字符串,它指示Python首先在当前目录中搜索模块。注意,由于PYTHONPATH的结果,将脚本目录插入到插入的条目之前。

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

或者您也可以仅打印第一个路径

print(dir[0])

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.