Python列表解析

本文介绍了Python中的列表解析,这是一种利用迭代机制快速生成新列表的方法。通过实例展示了如何用列表解析创建数字平方、筛选平方大于等于4的数字、计算平方除以2的值,以及从文件夹中获取特定后缀名的文件。相比于传统循环方式,列表解析提供了更简洁高效的代码实现。
摘要由CSDN通过智能技术生成

列表解析

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

  列表解析是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('\n'.join([''.join(['%s*%s=%-2s '%(y,x,x*y)for y in range(1,x+1)])for x in range(1,10)]))

说明:

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

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值