列表解析
根据已有列表,高效创建新列表的方式。
列表解析是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倍。因此推荐使用列表解析。
最后,如果你也想自学Python,可以关注我。
我还整理出了一套系统的学习路线,这套资料涵盖了诸多学习内容: 【点击这里】领取!
包括:Python激活码+安装包、Python web开发,Python爬虫,Python数据分析,人工智能、自动化办公等学习教程。带你从零基础系统性的学好Python!开发工具,基础视频教程,项目实战源码,51本电子书籍,100道练习题等。相信可以帮助大家在最短的时间内,能达到事半功倍效果,用来复习也是非常不错的。