迭代对象推倒式,生成器表达式

Python数据结构生成技巧
本文深入探讨了Python中数据结构的高效生成方法,包括列表、字典、集合及生成器表达式的使用技巧与应用场景,通过实例讲解如何利用这些工具简化编程任务。
  1. 生成指定序列列表(程序生成)
    lst = []
    for i in range(1,6):
     lst.append('python_%d' % i)
    print(lst)

    结果:
    F:\myPy\venv\Scripts\python.exe F:/myPy/test.py
    ['python_1', 'python_2', 'python_3', 'python_4', 'python_5']

语法:
[结果 for 变量 in 可迭代对象 [其他流程语句]]
return 可迭代对象

  1. 列表推倒式

    #语法:
    lst = ['python_%d' % i for i in range(1,6)]
    print(lst)

    结果:
    F:\myPy\venv\Scripts\python.exe F:/myPy/test.py
    ['python_1', 'python_2', 'python_3', 'python_4', 'python_5']

  2. 字典推倒式
    dic = {'a':'111','b':'222'}
    nwe_dic = {dic[key]:key for key in dic}
    print(nwe_dic)

    结果:
    F:\myPy\venv\Scripts\python.exe F:/myPy/test.py
    {'111': 'a', '222': 'b'}

  3. 集合推导式
    lst = [1,2,3,1,1,3,2]
    s = {i for i in lst}
    print(s)

    结果:
    F:\myPy\venv\Scripts\python.exe F:/myPy/test.py
    {1, 2, 3}

  4. 生成器表达式
    r = (i for i in range(6))
    print(list(r))

    结果:
    F:\myPy\venv\Scripts\python.exe F:/myPy/test.py
    [0, 1, 2, 3, 4, 5]

  5. 练习
    1. 1习题一
      # 100以内被19整除的数
      lst = [i for i in range(1,101) if i % 19 == 0]
      print(lst)

      结果:
      F:\myPy\venv\Scripts\python.exe F:/myPy/test.py
      [19, 38, 57, 76, 95]

    2. 2 习题二
      lst1 = ['刘德华','周星驰','周润发']
      lst2 = ['华仔','星爷','发哥']
      # 找出周润发与昵称
      dic = {i1:i2 for i1 in lst1 for i2 in lst2 if i1.count('周润发') and i2.find('发哥') != -1}
      print(dic)

      结果:
      F:\myPy\venv\Scripts\python.exe F:/myPy/test.py
      {'周润发': '发哥'}

    3. 3 习题三
      lst1 = ['刘德华','周星驰','周润发']
      lst2 = ['华仔','星爷','发哥']
      # 找出对应的昵称
      dic = {lst1[i]:lst2[i] for i in range(len(lst1))}
      print(dic)

      结果:
      {'刘德华': '华仔', '周星驰': '星爷', '周润发': '发哥'}

总结:(没有元组推导式)

  1. 列表推导式比较耗费内存,一次性加载,生成器表达式几乎不用占内存。使用的时候才分配和使用内存
  2. 得到的值不一样,列表推导式得到的是一个列表。生成器表达式得到的是一个生成器
    举例:
    同样一个篮子的鸭蛋,列表推导式:直接拿到一篮子鸭蛋。生成器表达式:拿到一只母鸭子, 需要鸭蛋时才下蛋。

转载于:https://blog.51cto.com/13972320/2378448

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值