• Python 列表解析


    作者博文地址:https://www.cnblogs.com/liu-shuai/

    列表解析

      根据已有列表,高效创建新列表的方式。

      列表解析是Python迭代机制的一种应用,它常用于实现创建新的列表,因此用在[]中。

    语法:

      [expression for iter_val in iterable]

      [expression for iter_val in iterable if cond_expr]

    实例展示:

     1 要求:列出1~10所有数字的平方
     2 ####################################################
     3 1、普通方法:
     4 >>> L = []
     5 >>> for i in range(1,11):
     6 ...     L.append(i**2)
     7 ... 
     8 >>> print L
     9 [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
    10 ####################################################
    11 2、列表解析
    12 >>>L = [ i**2 for i in range(1,11)]
    13 >>>print L
    14 [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
     1 要求:列出1~10中大于等于4的数字的平方
     2 ####################################################
     3 1、普通方法:
     4 >>> L = []
     5 >>> for i in range(1,11):
     6 ...     if i >= 4:
     7 ...         L.append(i**2)
     8 ... 
     9 >>> print L
    10 [16, 25, 36, 49, 64, 81, 100]
    11 ####################################################
    12 2、列表解析
    13 >>>L = [ i**2 for i in range(1,11) if i >= 4 ]
    14 >>>print L
    15 [16, 25, 36, 49, 64, 81, 100]
     1 要求:列出1~10所有数字的平方除以2的值
     2 ####################################################
     3 1、普通方法
     4 >>> L = []
     5 >>> for i in range(1,11):
     6 ...     L.append(i**2/2)
     7 ... 
     8 >>> print L
     9 [0, 2, 4, 8, 12, 18, 24, 32, 40, 50]
    10 ####################################################
    11 2、列表解析
    12 >>> L = [i**2/2 for i in range(1,11) ]
    13 >>> print L
    14 [0, 2, 4, 8, 12, 18, 24, 32, 40, 50]
     1 要求:列出"/var/log"中所有已'.log'结尾的文件
     2 ##################################################
     3 1、普通方法
     4 >>>import os
     5 >>>file = []
     6 >>> for file in os.listdir('/var/log'):
     7 ...     if file.endswith('.log'):
     8 ...         file.append(file)
     9 ... 
    10 >>> print file
    11 ['anaconda.ifcfg.log', 'Xorg.0.log', 'anaconda.storage.log', 'Xorg.9.log', 'yum.log', 'anaconda.log', 'dracut.log', 'pm-powersave.log', 'anaconda.yum.log', 'wpa_supplicant.log', 'boot.log', 'spice-vdagent.log', 'anaconda.program.log']
    12 ##################################################
    13 2.列表解析
    14 >>> import os
    15 >>> file = [ file for file in os.listdir('/var/log') if file.endswith('.log') ]
    16 >>> print file
    17 ['anaconda.ifcfg.log', 'Xorg.0.log', 'anaconda.storage.log', 'Xorg.9.log', 'yum.log', 'anaconda.log', 'dracut.log', 'pm-powersave.log', 'anaconda.yum.log', 'wpa_supplicant.log', 'boot.log', 'spice-vdagent.log', 'anaconda.program.log']
     1 要求:实现两个列表中的元素逐一配对。
     2 1、普通方法:
     3 >>> L1 = ['x','y','z']
     4 >>> L2 = [1,2,3]      
     5 >>> L3 = []
     6 >>> for a in L1:
     7 ...     for b in L2:
     8 ...         L3.append((a,b))
     9 ... 
    10 >>> print L3
    11 [('x', 1), ('x', 2), ('x', 3), ('y', 1), ('y', 2), ('y', 3), ('z', 1), ('z', 2), ('z', 3)]
    12 ####################################################
    13 2、列表解析:
    14 >>> L1 = ['x','y','z']
    15 >>> L2 = [1,2,3]
    16 L3 = [ (a,b) for a in L1 for b in L2 ]
    17 >>> print L3
    18 [('x', 1), ('x', 2), ('x', 3), ('y', 1), ('y', 2), ('y', 3), ('z', 1), ('z', 2), ('z', 3)]
    1 使用列表解析生成 9*9 乘法表
    2 
    3 print('
    '.join([''.join(['%s*%s=%-2s '%(y,x,x*y)for y in range(1,x+1)])for x in range(1,10)]))

    说明:

      以上实例,使用列表解析比使用普通方法的速度几乎可以快1倍。因此推荐使用列表解析。

  • 相关阅读:
    四叉树平面分割算法快速图元搜索
    dataGridView的行号
    记一次部署系列:prometheus+exporter+alertmanager+pushgateway+cAdvisor+Grafana
    记一次部署系列:grafana配置特定指标进行邮件告警
    记一次部署系列:prometheus配置通过alertmanager进行邮件告警
    记一次部署系列:prometheus通过pushgateway配置自定义监控项
    ArrayList方法原理解析
    从一个类上获取不到注解的原因
    Keycloak 入门实战(1)简介
    Keycloak 入门实战(2)安装
  • 原文地址:https://www.cnblogs.com/liu-shuai/p/6098227.html
Copyright © 2020-2023  润新知