在Python中将列表元素打印在单独的行上

133
当我尝试这段代码时:
import sys
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

2
为什么需要对它们进行解析?它们不已经是一个列表了吗? - SingleNegationElimination
10个回答

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

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


1
我知道,对于那么小的列表来说这并不重要,但是在for循环内部直接打印比这种方式消耗更少的内存,并且稍微简单一些。 - utdemir
你会如何在for循环中实现它? - Larry
2
@Larry:for line in sys.path: print line - Katriel
5
py3: f = lambda *x: null; f( *( print( x ) for x in sys.path ) ) -- 只是开玩笑... - flow

97

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

from __future__ import print_function

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

8
最好在打印包含非字符串元素的列表时使用此答案。 - BallpointBen

30

使用扩展运算符(*

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

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

2
这是一种新的、聪明的做法!比使用混乱而冗长的lambda或map/joins要好得多。关于"splat"的解释可以在这里找到。 - not2qubit
7
那个回答和这个有什么不同?这是2011年的回答链接:this - Tomerikoo

24

处理这种选项的另一个好选择是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

19
for path in sys.path:
    print(path)

注意:千万不要尝试在由papermill控制的笔记本电脑上执行此操作!这是一种极其低效的方法,如果您过度使用它(例如将其放入数百个单元格中),papermill将处理笔记本的速度比没有这些循环慢大约10倍。您还可能会遇到“等待IOPub输出超时”和“papermill:自动保存太慢”等错误。 - mirekphd
@mirekphd,你知道这个是什么导致了papermill出错了吗? - Winston Ewert
我只能推测原因... 我所知道的是,在1月10日之前,这个程序运行得很好,但降级所有库(整个容器)或更改浏览器或切换到实验室都没有帮助。有用的是切换到基于join的单行代码(它恢复了与不打印相当的papermill速度)。 - mirekphd

9
Sven Marnach的答案基本上已经解决了问题,但有一个普遍性问题...如果要打印的列表不仅包含字符串,它将失败。
因此,“如何打印由换行符分隔的列表”的更一般的答案是...
print '\n'.join([ str(myelement) for myelement in mylist ])

然而,JBernardo提出的print函数方法更为优越。如果可以的话,使用print函数而不是print语句几乎总是一个好主意。


1
你应该避免在可以使用生成器表达式的情况下使用列表推导式,而你绝对可以在这里使用一个。看一下这个答案。你会在那个答案中得到更多有用的链接,比如这个 - Sнаđошƒаӽ
2
@Sнаđошƒаӽ 在这种情况下不是真的,请参见 https://dev59.com/oloU5IYBdhLWcg3wIkeI#37782238 - snakecharmerb
@snakecharmerb 很好知道。非常感谢分享! - Sнаđошƒаӽ

3

基于 join 的稍微通用一些的解决方案,甚至适用于 pandas.Timestamp

print("\n".join(map(str, my_list)))


2
为了将列表元素打印在不同的行上,您可以使用以下方法:
files = ['test1.txt', 'test2.txt', 'test3.txt']
for i in range(len(files)): print(files[i])

1

sys.path返回路径列表

ref

sys.path

这是一个字符串列表,用于指定模块的搜索路径。它从环境变量PYTHONPATH初始化,并附带一个与安装相关的默认值。

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

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

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

print(dir[0])


0

你也可以将列表转换为大小为len(sys.path)的numpy数组

print(np.array(sys.path).reshape(-1,1))

输出:

[['.']
 ['/usr/bin']
 ['/home/student/Desktop']
 ['/home/student/my_modules']
 ['/usr/lib/python2.6']
 ['/usr/lib/python2.6/plat-linux2']
 ['/usr/lib/python2.6/lib-tk']
 ['/usr/lib/pyton2.6/lib-old']
 ['/usr/lib/python2.6/lib-dynload']
 ['/usr/local/lib/python2.6/dist-packages']
 ['/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/python2.6/dist-packages/wx-2.8-gtk2-unicode']]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接