Python入门高级特性中切片和列表生成式还有生成器使用教程 |
您所在的位置:网站首页 › python冒号后面报错 › Python入门高级特性中切片和列表生成式还有生成器使用教程 |
![]() 切片就是取部分元素是非常常见的操作。 对这种经常取指定索引范围的操作,用循环十分繁琐,因此,Python提供了切片操作,能大大简化这种操作。 切片操作十分有用。我们先创建一个-5-5的数列: 输出结果:[-5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5] 通过切片轻松取出某一段数列。比如前6个数: 输出结果:[-5, -4, -3, -2, -1, 0] ,-5 到0刚好6个数。 取后面6个数:倒数第一个数是-1,后6个数就是-6。后面6个数从-6开始往后取。 输出结果: 获取前4-8个数: 输出结果:[-1, 0, 1, 2] 获取前10个数每两个取一个: 输出结果:[-5, -3, -1, 1, 3] 获取后面8个数每三个取一个: 输出结果:[-2, 1, 4] 省略开始数字、结束数字和步长,只用一个冒号。 输出结果:[-5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5],可以用来当复制使用。 切片支持使用类型有字符串、元组、列表、字典。 注意: 字典切片只取键,不取值。 集合是无序不重复的序列,切片会报错。列表生成式是Python内置的非常简单却强大的可以用来创建list的生成式。 举个例子,要生成列表 [1, 2, 3, 4, 5, 6, 7, 8, 9, 10],可以用list(range(1, 11))。 但如果要生成[1x1, 2x2, 3x3, ..., 10x10]怎么做? 也就是平方。但是循环太繁琐,而列表生成式则可以用一行语句代替循环生成: 输出结果: 解析:[x*x for x in range(1,11)],就是for循环里面定义的变量。其实平方还可以改成[x**2 for x in range(1,11)],用**计算平方。 写列表生成式时,把要生成的元素x * x放到前面,后面跟for循环,就可以把list创建出来,十分有用,多写几次,很快就可以熟悉这种语法。 for循环后面还可以加上if判断,这样我们就可以筛选出仅偶数的平方: 输出结果:只有1-10的偶数平方,2、4、8、10。 还可以使用两层循环,可以生成全排列: 输出结果: 三层和三层以上的循环就很少用到了。运用列表生成式,可以写出非常简洁的代码。 生成器(generator) 如果列表元素可以按照某种算法推算出来,那我们是否可以在循环的过程中不断推算出后续的元素呢? 这样就不必创建完整的list,从而节省大量的空间。通过列表生成式,我们可以直接创建一个列表。但是,受到内存限制,列表容量肯定是有限的。 而且,创建一个包含100万个元素的列表,不仅占用很大的存储空间。 如果我们仅仅需要访问前面几个元素,那后面绝大多数元素占用的空间都白白浪费了。 只要把一个列表生成式的[]改成(),就创建了一个生成器。 输出结果:列表生成器直接显示列表元素;而生成器一串字母,大概的意思就是生成器对象genexpr存放在内存地址0x0000000001DD55E8。 这种不断调用next(lists2)实在是太变态了,正确的方法是使用for循环,因为生成器也是可迭代对象: 输出结果:end=' ',表示用空格隔开不换行。 创建了一个生成器后,基本上永远不会调用next(),而是通过for循环来迭代它,并且不需要关心StopIteration的错误。 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |