• 字典列表元组的推导式使用方法


    元组生成器很特殊

    只有元组生成生成器对象

    注意事项

    元组生成器调用注意事项,只能调用一次!
    无论通过哪种方式遍历后,若想再使用该生成器对象,都必须重新创建一个生成器,
    因为遍历后的原生成器对象已经不存在了。
    从最后一个示例可以看出,每访问生成器对象中的一个元素,就会少一个元素。

    大致推导式的格式相似

    i for i in 某元素/range # in的是可迭代元素即可
    再在外部加上[],(),{}即可

    # 用推导式生成一个有12个元素组成,且每个元素均为0的列表 
    
    # python的推导式
    
    a = [0 for i in range(12)] # 列表的
    b = (int(i) for i in str("0"*12)) # 元组的比较特殊是生成生成器对象
    c = {i:i for i in range(12)} # 字典的
    d = [int(i) for i in str("0"*12)]
    
    # 元组打印出来的是生成生成器对象
    print(a) # [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
    print(b) # <generator object <genexpr> at 0x000001CA7DC063B8>
    print(c) # {0: 0, 1: 1, 2: 2, 3: 3, 4: 4, 5: 5, 6: 6, 7: 7, 8: 8, 9: 9, 10: 10, 11: 11}
    print(d) # [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
    
    # 访问生成器对象的方法
    """
    生成器调用注意事项,只能调用一次!
    
    无论通过哪种方式遍历后,若想再使用该生成器对象,都必须重新创建一个生成器,
    因为遍历后的原生成器对象已经不存在了。
    
    从最后一个示例可以看出,每访问生成器对象中的一个元素,就会少一个元素。
    """
    
    # 1.可以使用tuple()或list()将其转换为元组或列表。如下
    # 用list,tuple()会报错,must be str,not be list/tuple
    # b1 = tuple(b)
    # print("访问生成器对象用tuple方法:"+b1)
    # b2 = list(b)
    # print("访问生成器对象用list方法:"+b2)
    # 创建个新元组生成器对象
    
    tuple1=("Amy","Swan")
    newtuple=(ch*3 for ch in tuple1) # 
    n1 = [ch*3 for ch in tuple1]
    print("打印下这个里面的元素*3遍历长啥样",n1) # ['AmyAmyAmy', 'SwanSwanSwan']
    
    print("打印下这个生成器对象",newtuple) # ['AmyAmyAmy', 'SwanSwanSwan']
    # print(list(newtuple)) # ['AmyAmyAmy', 'SwanSwanSwan']
    # print(tuple(newtuple)) # ()前面调用了一次生成器对象list(newtuple),所以就为空
    print("用tuple在前试试",tuple(newtuple)) # ('AmyAmyAmy', 'SwanSwanSwan')
    print("list在后",list(newtuple))   #  []
    
    # 2.使用for循环遍历
    for i in b: # b是元组生成器
        print("生成器对象中的元素每遍历一次,元素就会少一个",i)
    print('----下面再来打印下生成器对象b-----:',b) # <generator object <genexpr> at 0x000001CA7DC063B8>
    # 直接使用__next__进行遍历
    
    tuple1=(233,32,57,44,83,590,651)
    tuple2=(x for x in tuple1 if x<100)
    print(tuple2.__next__()) # 32
    print(tuple2.__next__()) # 57
    print(tuple2.__next__())  #   44    #到此为止,生成器中的元素还未打印完
    print(tuple(tuple2)) # (83,);最后一个83
    print('-'*20)
    # 使用next()函数遍历
    tuple3=(x for x in tuple1 if x<100)
    a = list(tuple3)
    print('用list方法来查看元组生成器的具体',a) # [32, 57, 44, 83]
    
    ### 使用next()方法报错,难道next()方法只能用在函数对象上
    ### 这里元素并没有耗尽啊
    '''
    通过调用 iterator 的 __next__() 方法获取下一个元素。
    如果迭代器耗尽,则返回给定的 default,
    如果没有默认值则触发 StopIteration。
    '''
    print(next(tuple3)) # StopIteration
    # print(next(tuple3))
    # print(next(tuple3))
    # print(next(tuple3))
    
    
    
    努力拼搏吧,不要害怕,不要去规划,不要迷茫。但你一定要在路上一直的走下去,尽管可能停滞不前,但也要走。
  • 相关阅读:
    mysql授权grant
    实际用到的linux小方法
    rpm包与 yum 安装与卸载
    7个优秀的国内外移动端web框架(转)
    (转) 关于成为linux运维工程师需要掌握的技能
    Content-Language:en-US
    hibernate的formula如何使用
    No Hibernate Session bound to thread, and configuration does not allow creat
    spring mvc 配置
    十六进制字符串转化为byte数组
  • 原文地址:https://www.cnblogs.com/wkhzwmr/p/15086014.html
Copyright © 2020-2023  润新知