美文网首页
python的高级特性

python的高级特性

作者: 咸鱼有梦想呀 | 来源:发表于2018-09-27 11:37 被阅读0次

在python中,代码是越少越好,越简单越好。
因此就有了python常用的高级特性。

  • 切片(Slice)
    切片操作符,用于经常取指定索引范围的操作。
    好处就是减少使用循环

eg:

list切片

L[0:3]表示从索引0开始取,直到索引3为止,但不包括索引3
如果第一个索引是0还可以省略。

list切片

倒数切片。-1是倒数第一个元素的索引。

切片不但可以取相邻的,还可以每两个取一次,或者每5个取一次。

list切片

tuple也是一种list,唯一区别是tuple不可变。因此,tuple也可以用切片操作,只是操作的结果仍是tuple

tuple切片

字符串切片:

字符串切片

小练习:
利用切片操作,实现一个trim()函数,去除字符串首尾的空格

def trim(s):
    if(s[:1]==' '):
        s = trim(s[1:])
    elif(s[-1:]==' '):
        s = trim(s[0:-1])
    return s
运行结果
  • 迭代(Iteration)
    给定一个list或tuple,可以通过for循环来遍历这个list或tuple,这种遍历我们称为迭代(Iteration).
    在python中,迭代是通过for……in完成的。

a.迭代list

迭代list

下标循环,Python内置的enumerate函数可以把一个list变成索引-元素对

迭代list:索引-元素对

b.迭代字符串

字符串迭代

c.迭代dict

迭代dict 同时迭代key和value

d.判断一个对象是否可迭代
通过collections模块的Iterable类型判断

判断类型是否可以迭代

IDLE界面不需要导入
在dos界面需要导入

from collections import Iterable

小练习:
请使用迭代查找一个list中最小和最大值,并返回一个tuple

def findMinAndMax(L):
    if L != []:
        max = L[0]
        min = L[0]
        for l in L:
            if max < l:
                max = l
            if min > l:
                min = l
        return (min, max)
    else:
        return (None, None)
运行结果
  • 列表生成式
    列表生成式即List Comprehensions,是Python内置的非常简单却强大的可以用来创建list的生成式。

例如,生成list[1,2,3,4,5,6,7,8,9,10]

list(range(1,11))

生成[1x1, 2x2, 3x3, ..., 10x10]

生成list

for循环后面还可以加上if判断,这样我们就可以筛选出仅偶数的平方

生成条件list

还可以使用两层循环,可以生成全排列:

全排列

把一个list中所有的字符串变成小写:

字符串变小写

小练习:
判断list是否都是字符串,并将首字母变成小写,生成list

练习

运用列表生成式,可以快速生成list,可以通过一个list推导出另一个list,而代码却十分简洁。

  • 生成器
    通过列表生成式,我们可以直接创建一个列表。但是,受到内存限制,列表容量肯定是有限的。而且,创建一个包含100万个元素的列表,不仅占用很大的存储空间,如果我们仅仅需要访问前面几个元素,那后面绝大多数元素占用的空间都白白浪费了。
    所以,如果列表元素可以按照某种算法推算出来,那我们是否可以在循环的过程中不断推算出后续的元素呢?这样就不必创建完整的list,从而节省大量的空间。在Python中,这种一边循环一边计算的机制,称为生成器:generator。

把一个列表生成式的[]改成(),就创建了一个generator

生成器和列表生成式的区别

generator保存的是算法,每次调用next(g),就计算出g的下一个元素的值,直到计算到最后一个元素,没有更多的元素时,抛出StopIteration的错误。

使用for循环,不但可以避免抛出StopIteration的错误,而且很方便。generator也是可迭代对象

for循环迭代生成器

如果推算的算法比较复杂,用类似列表生成式的for循环无法实现的时候,还可以用函数来实现。

例如著名的斐波拉契数列(Fibonacci)除第一个和第二个数外,任意一个数都可由前两个数相加得到:

1, 1, 2, 3, 5, 8, 13, 21, 34, ...

def fib(max):
    n,a,b = 0,0,1
    while n < max:
        print(b)
        a,b = b,a + b
        n = n + 1
    return 'done'
代码解释

这个函数可以输出斐波拉契数列的前N项:

运行结果

上述函数离generator还差一步:
要想把fib()函数变成generator,只需要把print(b)改成yield b就可以了。

def fib(max):
    n, a, b = 0, 0, 1
    while n < max:
        yield b
        a, b = b, a + b
        n = n + 1
    return 'done'

如果一个函数定义中包含yield关键字,那么这个函数就不再是一个普通函数,而是一个generator

生成器

函数是顺序执行,遇到return语句或者最后一行函数语句就返回。而变成generator的函数,在每次调用next()的时候执行,遇到yield语句返回,再次执行时从上次返回的yield语句处继续执行。

生成器

小练习:
杨辉三角定义如下:

          1
         / \
        1   1
       / \ / \
      1   2   1
     / \ / \ / \
    1   3   3   1
   / \ / \ / \ / \
  1   4   6   4   1
 / \ / \ / \ / \ / \
1   5   10  10  5   1

把每一行看做一个list,试写一个generator,不断输出下一行的list

def yhTri(n):
    l,index = [1],0
    while index < n:
        yield l
        l = [1] + [l[i] + l[i + 1] for i in range(len(l) - 1)] + [1]
        index += 1
运行结果

现在知道能用for循环的数据类型有以下几种
一类是集合数据类型:list,tuple,dict,str
一类是generator包括生成器和带yield的generator function。
些可以直接作用于for循环的对象统称为可迭代对象:Iterable

相关文章

  • Python学习(三)

    Python的高级特性 python中有很多高级特性,比起C/C++来说要简单许多,运用起来十分方便。 切片 通常...

  • Python高级特性

    切片slice取指定索引范围的操作:[0:10:2]-->意为从第一个元素到第11个元素,元素之间隔2 迭代ite...

  • python 高级特性

    1.切片对取数据很方便,如取一个list的前n个元素,没有接触到切片的,可以使用循环,但是用切片就会很简单: 也支...

  • Python高级特性

    切片 迭代 列表生成式 生成器 generator generator:按照某种算法推算出来结果,是一种一边循环一...

  • Python——高级特性

    #!/usr/bin/python # -*- coding:UTF-8 -*- __author__ = 'wx...

  • python高级特性

    python高级特性 iteration迭代 对list,tuple的遍历被称为迭代。对list实现类似Java那...

  • python高级特性

    一、列表生成器 1. 形式: [表达式 for ... in 可迭代类型 [if expression] ] 2....

  • Python 高级特性

    切片 迭代 列表生成式 生成器 迭代器

  • Python高级特性

    掌握了Python的数据类型、语句和函数,基本上就可以编写出很多有用的程序了。 比如构造一个1, 3, 5, 7,...

  • python高级特性

    1、切片(slice)L[0:3]表示,从索引0开始取,直到索引3为止,但不包括索引3。即索引0,1,2,正好是3...

网友评论

      本文标题:python的高级特性

      本文链接:https://www.haomeiwen.com/subject/fyqqoftx.html