Python2.7 for循环生成列表

Python2.7 for循环生成列表,python,python-2.7,Python,Python 2.7,我在Python2.7中进行了测试,这两种样式是相同的。我的困惑是,当阅读第一个生成列表的方法时,如果I%2==0控制我们是否应该执行范围(100)内的I的整个循环,或者I%2==0处于范围(100)内的I的循环下,我总是有点困惑。我有困惑,也许我以前写过java和C++,从那里思考方法。 在寻找如何读取列表生成代码的建议时,通常模式是[],在这种情况下,“循环前的某物”是1,“循环”是,对于范围(100)内的i,“循环后的某物”是i%2==0 还询问在Python2.7中,用方法1编写代码是否

我在Python2.7中进行了测试,这两种样式是相同的。我的困惑是,当阅读第一个生成列表的方法时,如果
I%2==0
控制我们是否应该执行范围(100)内的
I的整个循环,或者
I%2==0
处于范围(100)
内的
I的循环下,我总是有点困惑。我有困惑,也许我以前写过java和C++,从那里思考方法。
在寻找如何读取列表生成代码的建议时,通常模式是
[]
,在这种情况下,“循环前的某物”是
1
,“循环”是
,对于范围(100)
内的i,“循环后的某物”是
i%2==0

还询问在Python2.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

a = [1 for i in xrange(100) if i%2 == 0]
我还想比较一下在显式循环中使用
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) 正如Python2.7中已经提到的,通常建议使用xrange,因为它(与C中一样)只保留一个递增的计数器。 相反,这个范围实际上是在内存中创建一个从0到99的完整列表! 也许在这里您必须考虑,如果您需要包含的100-->那么请使用101;)

2) 你明白我的意思了,这个问题是正确的,你必须认为这个操作确实会在循环下执行

记住,列表理解是非常强大的,以便创建所需的!!无论如何,要小心,在某些情况下是不容易阅读的,特别是当您使用多个变量,如x,y等内部变量时

我会选择你的第一行,只考虑你数组的最小值和最大值。如前所述,您可能需要合并第100个元素,并且可以使用xrange函数而不是range来加速。 a=[1表示范围(100)内的i,如果i%2==0]

3) 一个很好的建议是在xrange上记录您自己,而在stackoverflow上记录循环-->您可以找到大量的讨论,寻找上述两种操作的速度!!(这只是建议)


希望这能澄清你的疑问!祝你今天愉快

在Python 2中,
range
实际上在RAM中创建了整个列表,而
xrange
是一个生成器函数,它只计算并返回下一个值。因此,如果您只需要偶数的真/假值,您可以只使用
a=[(i%2==0)表示xrange(100)中的i]
第一种方法称为“列表理解”。它有它的优点和缺点,但主要是优点(国际海事组织)。这两种方法在Python中都是完全有效的。这是一种创建_1_s数组的奇怪方法。顺便说一句,range和xrange都有“完整”形式的
range(开始、停止、步骤)
并且在列表理解中,您可以而且应该仍然使用xrange:-)请参阅下面的回复,祝您周末愉快。@LinMa性能/内存使用Hi Lin Ma,如果您尝试打开python2.7并写下:x=range(10)您将得到一个值从0到9的列表,因此有10个项目(使打印x变得简单)。如果您现在尝试y=xrange(10)并打印它,您将不会得到任何列表,而是一个确实是计数器的对象!!这是最大的区别。现在假设一个程序,你没有10个但数十亿个元素,范围将创建一个完整的列表,计数器只是一个C++数字,通过你选择的步骤增加。这不是很好吗??因此,有了xrange,您可以加快大数据分析的速度,但为了简便起见,请列出您可以使用的范围。最后但并非最不重要的一点是,与while循环相比,我真正喜欢的是xrange的强大功能。请检查组装代码中的xrange与链接中的xrange相比有多快。这意味着,如果您可以避免while循环并选择某个xrange值,那么这对整个程序来说会更好。当然,这通常是在大的处理过程中完成的,这只是一个建议点,你可以作为好奇心来阅读!!祝你度过愉快的一天,希望这能彻底澄清你的疑问@林马:这个问题很容易回答。这两种方法都是正确的,在一些更复杂的情况下,我更喜欢使用for/if的第一种方法。当然,第一种情况更容易阅读,并且对于n=100的小数字可以很容易地实现。第二种情况在大多数情况下都是首选,尤其是当它很容易阅读的时候。列表理解通常很快。试着比较n=10**8的情况,在我的电脑中,第一种情况我得到了14.921000038,第二种情况我得到了11.677000458。这可以从中理解。易于实现的列表理解(如map()函数)有助于加快处理速度。如果是你的代码,我总是建议使用第二种方法:)如果你在上课,那么你可以展示第一种方法:-)如果问题现在完成了,你能把我的答案标记为绿色,然后我们就可以结束了:-)我想你得到了下一个实现所需的所有信息!!祝您有个美好的一天!!