我在Python 2.7中测试过,两种风格是一样的。我的困惑是,在阅读第一个生成列表的方法时,如果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>]
,在这种情况下为&#34;在循环之前的某些内容&#34;是1
,&#34;循环&#34;是for i in range(100)
和&#34;循环后的东西&#34;是i%2 == 0
。
如果在方法1中编写代码是Python 2.7中的良好编码风格,还要求建议吗?感谢。
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]
答案 0 :(得分:1)
1)如python 2.7中已经提到的,通常建议使用xrange,因为它(如在C中)只保留一个将递增的计数器。 相反,范围实际上是在内存中创建从0到99的整个列表! 也许在这里你必须考虑,如果你需要100包括 - &gt;那么请使用101;)
2)你明白我的观点,问题是有效的,你必须认为操作确实会被执行&#34;&#34;循环!!
请记住,列表理解是非常强大的,以创造需要!无论如何要小心,在某些情况下,如果你在x,y等多个变量中使用它,就不容易阅读。
我会选择你的第一行,只需要处理阵列的最小值和最大值。如上所述,你可能必须加入第100个元素,你可以加速使用xrange函数而不是range。 a = [1表示i在范围内(100),如果i%2 == 0]
3)一个好的建议也是在xrange和while循环上记录自己 - &gt;在stackoverflow上你可以找到很多讨论寻找两个提到的操作的速度! (这只是建议)
希望这能澄清您的疑问!祝你有愉快的一天!