python 2.7 for循环生成列表

时间:2016-10-20 07:46:54

标签: python python-2.7

我在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]

1 个答案:

答案 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上你可以找到很多讨论寻找两个提到的操作的速度! (这只是建议)

希望这能澄清您的疑问!祝你有愉快的一天!