在Python中,使用列表推导还是for循环更好?
下面哪种方法更好用,为什么呢?
方法一:
for k, v in os.environ.items():
print "%s=%s" % (k, v)
方法二:
print "\n".join(["%s=%s" % (k, v)
for k,v in os.environ.items()])
我个人觉得第一种方法更容易理解,但这可能是因为我刚接触Python,对列表推导式还不太熟悉。第二种方法算不算更符合Python的风格呢?我猜这两种方法在性能上没有区别,但我可能错了。那这两种技术各自的优缺点是什么呢?
(代码来自 深入Python)
7 个回答
16
我觉得第一个例子更好——简洁、清晰,容易阅读。
在我看来,选择最能表达你意图的方式,毕竟:
程序应该是为了人类阅读而写的,机器执行只是附带的。
-- 引自阿贝尔森和萨斯曼的《计算机程序的结构与解释》
顺便说一下,既然你刚开始学习Python,就赶紧学习一下新的字符串格式化语法吧:
for k, v in os.environ.items():
print "{0}={1}".format(k, v)
27
你选择的这些代码示例并没有展示出列表推导的任何优势,因为它被错误地用在了一个很简单的打印任务上。在这种简单的情况下,我会选择直接用简单的for
循环。
在很多其他情况下,你可能需要把一个实际的列表传递给另一个函数或方法,而列表推导是最简单、最易读的方式来做到这一点。
一个能清楚展示列表推导优越性的例子,可以通过把print
的例子换成一个涉及创建另一个实际列表的例子来实现,这样在每次for
循环中都往这个列表里添加内容:
L = []
for x in range(10):
L.append(x**2)
这样得到的L
和:
L = [x**2 for x in range(10)]
45
如果你在循环中是为了某种副作用(就像你提到的“打印”例子),那么用普通的循环会更清晰。
如果你是为了生成一个组合的值,那么使用列表推导式通常会更容易理解。