我见过的很多开发人员建议最好使用简单的循环,如果是条件而不是一行列表理解语句。
我总是发现它们非常强大,因为我可以将大量代码放在一行中,并且它可以节省很多变量。为什么它仍然被认为是一种不好的做法?
(它慢吗?)
答案 0 :(得分:22)
列表推导用于创建列表,例如:
squares = [item ** 2 for item in some_list]
对于使用列表(或其他对象)的元素做某事,for循环更好:
for item in some_list:
print(item)
通常不赞成使用对其副作用的理解,或者使用for循环来创建列表。
这里的一些其他答案主张将理解变为循环,一旦变得太长。我不认为这是好风格:创建列表所需的append
调用仍然很难看。相反,重构为函数:
def polynomial(x):
return x ** 4 + 7 * x ** 3 - 2 * x ** 2 + 3 * x - 4
result = [polynomial(x) for x in some_list]
只有当你担心速度时 - 你才能完成你的分析! - 你应该保持长期不可读的列表理解。
答案 1 :(得分:6)
这不算坏。
但是,列表理解要么
通常不赞成。
换句话说,可读性很重要。
作为第一个不好的例子的过度设计的例子:
x = range(10)
[x.append(5) for _ in xrange(5)]
基本上,如果你没有存储结果,和/或它修改了其他一些对象,那么列表理解可能是一个坏主意。
作为第二个例子,看看几乎所有用python编写的代码高尔夫球条目。一旦您的列表理解开始成为一目了然的可读性,请考虑使用for循环。
答案 2 :(得分:4)
没有性能损失(即使有,我也不担心;如果性能如此重要,你的语言是错误的)。有些人对列表的理解不屑一顾,因为对某些人来说,这有点过于简洁,这是个人偏好的问题。通常,我发现简单的列表推导比它们的循环/条件等价物更易读,但是当它们开始变长(例如,你开始超过80个字符)时,它们可能更好地被循环替换。