列表表达式和生成器

列表表达式和生成器

  • 列表表达式

    • 旧列表生成满足条件的新列表

    • 语法:

        1. [表达式 for 变量 in 旧列表]
        1. [表达式 for 变量 in 旧列表 if 条件]

          • ls = ['jordan','alice','tom','jack','bob']
            new_ls = [name.capitalize() for name in ls if len(name) > 4]
            print(new_ls)
            # ['Jordan', 'Alice']
            
            
          • ls = [i for i in range(101) if i % 3 == 0]
            print(ls)
            
            # 这两者结果一致
            def fn(ls):
                new_ls = []
                for i in ls:
                    if i % 3 == 0:
                        new_ls.append(i)
                return new_ls
            ls = range(101)
            print(fn(ls))
            
  • 生成器 generator

    • 在Pyhton中有一边循环一边计算的机制,称之为生成器

    • 如何创建生成器

      • 1 通过列表表达式

        • ls = [x * 3  for x in range(10)]
          print(type(ls),ls)                 # <class 'list'> [0, 3, 6, 9, 12, 15, 18, 21, 24, 27]
          
          new_ls = (x * 3 for x in range(10))
          print(type(new_ls),new_ls)     # <class 'generator'> <generator object <genexpr> at 0x1094fa270>
          # 方式一 __next__ 获得元素
          print(new_ls.__next__())        # 0
          print(new_ls.__next__())        # 3
          print(new_ls.__next__())        # 6
          # 方式二 next()
          print(next(new_ls))             # 9
          print(next(new_ls))             # 12
          print(next(new_ls))             # 15
          
          
      • 2 通过函数来完成,关键字yield

        • def fn():
              n = 0
              while True:
                  n += 1
                  yield n # 相当于return n + 暂停
          n = fn()
          print(n)    # <generator object fn at 0x10ef77270>
          print(next(n))				# 1
          print(next(n))				# 2
          print(n.__next__())		# 3
          
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值