• Python基础语法快速复习-高级特性


    1、切片

    取list或tuple的部分元素

    L = ['Chen','Yu','Long','Murasamelory']
    
    L[0:3]
    
    ['Chen', 'Yu', 'Long']
    

    切片取元素时,按照给定范围采取左闭右开的方式取元素。

    支持倒数切片

    print(L[-2:])
    print(L[-2:-1])
    
    ['Long', 'Murasamelory']
    ['Long']
    

    按照步长切片

    #快速创建列表
    L = list(range(100))
    #步长切片
    L[::5]
    
    [0, 5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60, 65, 70, 75, 80, 85, 90, 95]
    

    特殊:字符串'xxx'可以看作为一种list,每个元素是一个字符,可以对字符串进行切片操作。

    "ABCDEFG"[:3]
    
    'ABC'
    

    2、迭代

    使用for循环遍历的过程叫做迭代。

    python中迭代通过for...in来完成

    python的for循环可以作用于所有可迭代对象上,无论有无下标,都可以迭代。

    #迭代字典的key
    d = {'a':1,'b':2,'c':3}
    for key in d:
        print(key)
    print('='*10)
    #迭代字典的value
    for value in d.values():
        print(value)
    print('='*10)
    #同时迭代字典的key和value
    for k,v in d.items():
        print(k,v)
    
    a
    b
    c
    ==========
    1
    2
    3
    ==========
    a 1
    b 2
    c 3
    

    判断对象是否可迭代,采用collections模块中的Iterable类型判断

    from collections import Iterable
    print(isinstance('abc',Iterable))
    print(isinstance([1,2,3],Iterable))
    print(isinstance(123,Iterable))
    
    True
    True
    False
    
    
    <ipython-input-5-47569b4f962c>:1: DeprecationWarning: Using or importing the ABCs from 'collections' instead of from 'collections.abc' is deprecated since Python 3.3, and in 3.9 it will stop working
      from collections import Iterable
    

    实现下标循环:采用python内置enumerate函数将list变为索引-元素队,采用同时迭代的方法取出索引和元素本身

    for i,value in enumerate(['A','B','C']):
        print(i,value)
    
    0 A
    1 B
    2 C
    

    3、列表生成式

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

    [x*x for x in range(1,11)]
    
    [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
    

    在for循环后加上if判断筛选出仅偶数的平方。

    [x*x for x in range(1,11) if x%2==0]
    
    [4, 16, 36, 64, 100]
    

    两层循环的全排列

    [m+n for m in 'ABC' for n in 'XYZ']
    
    ['AX', 'AY', 'AZ', 'BX', 'BY', 'BZ', 'CX', 'CY', 'CZ']
    

    列出当前目录下的所有文件和目录名

    import os
    [d for d in os.listdir('.')]
    
    ['.ipynb_checkpoints', '函数.ipynb', '高级特性.ipynb']
    

    使用两个变量生成list

    d = {'x':'A','y':'B','z':'C'}
    [k+'='+v for k,v in d.items()]
    
    ['x=A', 'y=B', 'z=C']
    
    [x if x % 2 == 0 else -x for x in range(1, 11)]
    
    [-1, 2, -3, 4, -5, 6, -7, 8, -9, 10]
    

    for 前面的if...else是表达式,而for后面的if是过滤条件,不能带else。

    3、生成器

    生成器(generator):可以在循环的过程中不断推算出后续元素,这样就不需要创建完整的list,节省大量空间。

    #列表生成式
    L = [x*x for x in range(10)]
    print(L)
    #生成器创建
    g = (x*x for x in range(10))
    print(g)
    
    [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
    <generator object <genexpr> at 0x000002AFC437A2E0>
    

    遍历生成器的方法是采用for循环,因为生成器是可迭代对象。

    for n in g:
        print(n)
    
    0
    1
    4
    9
    16
    25
    36
    49
    64
    81
    

    斐波拉契数列用函数直接打印(列表生成式写不出来)

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

    a,b=b,a+b

    相当于

    t = (b,a+b)

    a = t[0]

    b = t[1]

    fib(6)
    
    1
    1
    2
    3
    5
    8
    
    
    
    
    
    'done'
    

    采用生成器写出斐波拉契数列函数

    def fib(max):
        n,a,b = 0,0,1
        while n<max:
            yield b
            a,b=b,a+b
            n=n+1
        return 'done'
    
    fib(6)
    
    <generator object fib at 0x000002AFC487E6D0>
    

    用next()执行generator对象时候,遇到yield语句就会返回,再次执行从上次返回的yield向后执行

    def odd():
        print('step 1')
        yield 1
        print('step 2')
        yield(3)
        print('step 3')
        yield(5)
        
    o = odd()
    print(next(o))
    print(next(o))
    print(next(o))
    
    step 1
    1
    step 2
    3
    step 3
    5
    

    4、迭代器

    直接作用于for循环的数据类型有以下几种:

    (1)集合数据类型,如list、tuple、dict、set、str等

    (2)生成器(generator)

    以上都是可迭代对象(Iterable)。

    可以被next()函数调用并不断返回下一个值的对象称为迭代器:Iterator

    可以使用isinstance()判断一个对象是否为迭代器。

    生成器都是迭代器对象,但list、dict、str是可迭代对象而非迭代器

    将list、dict、str变为迭代器使用iter()函数

    from collections.abc import Iterator
    print(isinstance(iter([]), Iterator))
    print(isinstance(iter('abc'), Iterator))
    
    True
    True
  • 相关阅读:
    flex 弹性盒布局 移动端首页
    less+rem基础使用
    github 本地操作
    git 码云
    react基础知识
    css样式
    uni-app 知识点
    web app
    2019年一半已过,这些大前端技术你都GET了吗?- 下篇
    2019年大前端技术周刊-#31周
  • 原文地址:https://www.cnblogs.com/MurasameLory-chenyulong/p/14530033.html
Copyright © 2020-2023  润新知