我在Python 2.7中测试过,两种风格是一样的。我的困惑是,当阅读第一个生成列表的方法时,我总是有点困惑 if i%2 == 0
控制我们是否应该执行 i in range(100)
的整个循环,或i%2 == 0
正在 i in range(100)
循环下。我有一个困惑,也许我过去写Java和C++,从那里思考方法。
寻求如何阅读列表生成代码的建议,通常模式是 [<something before loop> <the loop> <something after the loop>]
,在本例中“循环之前的内容”是 1
,“循环”是 for i in range(100)
而“循环之后的东西”是 i%2 == 0
.
还请教在Python 2.7中用方法1编写代码是否是好的编码风格?谢谢。
a = [1 for i in range(100) if i%2 == 0]
print a
a=[]
for i in range(100):
if i%2==0:
a.append(1)
print a
编辑 1,
我还想比较使用xrange
在显式循环中(与列表理解的第一种方法比较优缺点),例如,
a=[]
for i in xrange(100):
if i%2==0:
a.append(1)
print a
编辑2,
a = [1 for i in xrange(100) if i%2 == 0]
最佳答案
1) 正如 python 2.7 中已经提到的,通常建议使用 xrange,因为它(就像在 C 中一样)只保留一个会递增的计数器。 相反,范围实际上是在内存中创建从 0 到 99 的整个列表! 也许这里你必须想,如果你需要包含 100 --> 那么请使用 101 ;)
2)你明白我的意思,问题是有效的,你必须认为操作确实会在循环“下”执行!!
请记住,列表理解对于创建所需的内容非常强大!无论如何要小心,在某些情况下不太容易阅读,特别是当您在内部使用多个变量(如 x,y 等)时。
我会选择你的第一行,只需处理数组的最小值和最大值。如前所述,也许您必须合并第 100 个元素,并且您可以使用 xrange 函数而不是 range 来加快速度。 a = [1 for i in range(100) if i%2 == 0]
3) 一个好的建议是在 xrange 和 while 循环上记录自己 --> 在 stackoverflow 上,您可以找到大量讨论来寻找上述两个操作的速度! (这只是建议)
希望这能澄清您的疑问!祝你有美好的一天!
关于python 2.7 for循环生成列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40148422/