zoukankan      html  css  js  c++  java
  • 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倍。因此推荐使用列表解析。

  • 相关阅读:
    Python容器(zz)
    [Violet]蒲公英 分块
    [JSOI2008]火星人 hash+splay
    [USACO08DEC]拍头Patting Heads 水题
    [国家集训队]整数的lqp拆分 数学推导 打表找规律
    [HNOI2008]水平可见直线 单调栈
    [LNOI2014]LCA 树链剖分 离线 前缀和 思维题
    [SCOI2008]着色方案 递推 记忆化搜索
    [NOI2010]海拔 平面图转对偶图 最小割
    [NOI2008]志愿者招募 网络流 建模
  • 原文地址:https://www.cnblogs.com/liu-shuai/p/6098227.html
Copyright © 2011-2022 走看看