Python入门高级特性中切片和列表生成式还有生成器使用教程

Python入门高级特性中切片和列表生成式还有生成器使用教程
2019年01月13日 00:46 天意帝

对这种经常取指定索引范围的操作,用循环十分繁琐,因此,Python提供了切片操作,能大大简化这种操作。

输出结果:[-5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5]

输出结果:[-5, -4, -3, -2, -1, 0] ,-5 到0刚好6个数。

输出结果:

输出结果:[-1, 0, 1, 2]

输出结果:[-5, -3, -1, 1, 3]

输出结果:[-2, 1, 4]

输出结果:[-5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5],可以用来当复制使用。

注意:

  • 字典切片只取键,不取值。

  • 集合是无序不重复的序列,切片会报错。

举个例子,要生成列表

[1, 2, 3, 4, 5, 6, 7, 8, 9, 10],

可以用

list(range(1, 11))。

也就是平方。但是循环太繁琐,而列表生成式则可以用一行语句代替循环生成:

输出结果:

解析:[x*x for x in range(1,11)],就是for循环里面定义的变量。其实平方还可以改成[x**2 for x in range(1,11)],用**计算平方。

写列表生成式时,把要生成的元素

x * x

放到前面,后面跟

for

循环,就可以把list创建出来,十分有用,多写几次,很快就可以熟悉这种语法。

输出结果:只有1-10的偶数平方,2、4、8、10。

输出结果:

三层和三层以上的循环就很少用到了。运用列表生成式,可以写出非常简洁的代码。

  • 如果列表元素可以按照某种算法推算出来,那我们是否可以在循环的过程中不断推算出后续的元素呢?

  • 这样就不必创建完整的list,从而节省大量的空间。

通过列表生成式,我们可以直接创建一个列表。但是,受到内存限制,列表容量肯定是有限的。

而且,创建一个包含100万个元素的列表,不仅占用很大的存储空间。

如果我们仅仅需要访问前面几个元素,那后面绝大多数元素占用的空间都白白浪费了。

输出结果:列表生成器直接显示列表元素;而生成器一串字母,大概的意思就是生成器对象genexpr存放在内存地址0x0000000001DD55E8。

  • 生成器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束。生成器只能往前不会后退。

  • 如果要一个一个打印出来,可以通过

    next(lists2)

    函数获得生成器的下一个返回值。每取一个就要用一次next(lists2)。

  • 生成器保存的是算法,每次调用

    next(lists2)

    ,就计算出

    lists2

    的下一个元素的值,直到计算到最后一个元素,没有更多的元素时,抛出

    topIteration

    的错误。

输出结果:end=' ',表示用空格隔开不换行。

创建了一个生成器后,基本上永远不会调用

next()

,而是通过

for

循环来迭代它,并且不需要关心

StopIteration

的错误。

财经自媒体联盟更多自媒体作者

新浪首页 语音播报 相关新闻 返回顶部