• Python元组数据类型详解


    Python元组数据类型详解

    元组和列表相同,都是一组有序的数据的组合

    元组中的元素一旦定义不可修改

    元组定义

    • 定义空元组 变量=(),或者 变量=tuple()
    • 定义带元素元组 变量=(1,2,3)
    • 简化定义 变量=1,2,3
    • 注意:如果元组中只有一个元素时,元素后必须加, 变量=(1,)

    元组的相关操作

    由于元组是不可变类型,只能使用索引进行访问,不可以进行增删改

    但元组也可以和列表相同,使用切片形式获取元素

    # 元组的基本定义与操作
    
    varint=1,
    vart=(1,)
    print(type(varint),type(vart))
    
    # 元组的切片操作
    vart=(1,2,3,4,5,6,5,6,7,4,3,2,)
    res=vart[:]
    print(res)
    res=vart[1:]
    print(res)
    print(vart[0:-1])
    print(vart[0:])
    print(vart[::-1]) #倒着输出
    
    # 获取数组长度
    print(len(vart))
    
    # 统计元素出现的个数
    print(vart.count(5))
    
    # 获取元素在元组中的索引值
    vart=['python','java','php','c','c++','vb','shell','php']
    print(vart.index('php')) # 2
    
    # 从指定位置开始查找
    print(vart.index('php',3)) # 7
    
    # 从指定位置查找到指定位置结束
    print(vart.index('php',0,3)) # 2
    
    #元组的拼接
    var1=1,2,3
    var2='a','b','c'
    print(var1+var2) # (1, 2, 3, 'a', 'b', 'c')
    
    #元组的复制
    print(vart*2) # ['python', 'java', 'php', 'c', 'c++', 'vb', 'shell', 'php', 'python', 'java', 'php', 'c', 'c++', 'vb', 'shell', 'php']
    

    元组推导式(生成器)

    列表推导式返回了一个列表,元组推导式返回了一个生成器

    生成器:

    • 生成器是一个特殊的迭代器,生成器可以自定义,也可以用元组推导式定义

    • 生成器是按照某种算法推算下一个数据或结果,只需要网内存中存储一个生成器,节约内存消耗,提升性能

    语法:

    • 里面是推导式,外面是()的结果是一个生成器

    • 自定义生成器,还有yield关键字的函数就是生成器

    #元组推导式(生成器)
    # 列表推导式
    varlist=[1,2,3,4,5,56,7]
    newlist=[i*2 for i in varlist]
    print(newlist) # [2, 4, 6, 8, 10, 112, 14]
    
    # 元组推导式 返回生成器:genexpr
    vart=(1,2,3,4,5,6)
    newvart=(i*2 for i in vart)
    print(newvart) #  <generator object <genexpr> at 0x0000022C6A3BE580>
    # 操作生成器
    # 生成器是迭代器的一种,可以使用迭代器操作
    # 使用next()函数操作 
    print(next(newvart)) # 2
    print(next(newvart)) # 4
    print(next(newvart)) # 6
    # 使用list()函数操作
    newvart=(i*2 for i in vart)
    print(list(newvart))
    # 使用tuple()函数操作
    newvart=(i*2 for i in vart) # [2, 4, 6, 8, 10, 12]
    print(tuple(newvart)) # (2, 4, 6, 8, 10, 12)
    
    # 使用for循环进行遍历
    newvart=(i*2 for i in vart)
    for i in newvart:
        print(i)
    

    yield关键字

    yield类似于return
    共同点:关键字执行后把结果返回

    不同点:

    • return 会直接返回结果,并且结束当前函数的调用
    • yield 会返回结果并记录当前代码执行的位置,再次调用时从记录的位置继续向下执行
    # 定义普通函数
    def func():
        print('hello world')
        return 1
        print('hello python')
        return 2
    func() # 普通定义方法只会执行到return 1 无法再次向下运行代码
    
    # 使用 yield定义生成器函数
    def fun():
        print('hello world')
        yield 1
        print('hello python')
        yield 2
    # 调用生成器函数,返回一个迭代器
    res= fun()
    r1=next(res) # hello world
    print(r1) # 1
    r2=next(res) # hello python
    print(r2) # 2
    # 使用list函数调用生成器时,返回迭代器
    res=(fun())
    print(list(fun())) # [1, 2]
    
    # 练习斐波那契序列
    # 普通方法
    def feibo(num):
        a,b,i=0,1,0
        while i < num:
            print(b, end=',')
            a,b=b,a+b
            i+=1
    
    feibo(7)
    print('')
    # 使用生成器改写
    def feibo(num):
        a,b,i=0,1,0
        while i < num:
            yield b
            a,b=b,a+b
            i+=1
    
    res=feibo(7)
    print(next(res))
    
  • 相关阅读:
    高斯金字塔、拉普拉斯金字塔
    边缘检测:Canny算子,Sobel算子,Laplace算子
    数据结构-排序
    数据结构-查找
    数据结构-图
    数据结构-树
    数据结构-串
    数据结构-栈和队列
    数据结构-链表
    数据结构-线性表存储
  • 原文地址:https://www.cnblogs.com/hekaiqiao/p/15545433.html
Copyright © 2020-2023  润新知