在Python中,使用列表推导还是for循环更好?

39 投票
7 回答
18342 浏览
提问于 2025-04-15 22:48

下面哪种方法更好用,为什么呢?

方法一:

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

如果你在循环中是为了某种副作用(就像你提到的“打印”例子),那么用普通的循环会更清晰。

如果你是为了生成一个组合的值,那么使用列表推导式通常会更容易理解。

撰写回答