Python 列表解析

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

列表解析app

  根據已有列表,高效建立新列表的方式。spa

  列表解析是Python迭代機制的一種應用,它經常使用於實現建立新的列表,所以用在[]中。code

語法:blog

  [expression for iter_val in iterable]it

  [expression for iter_val in iterable if cond_expr]io

實例展現:class

 

 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)]))

 

說明:import

  以上實例,使用列表解析比使用普通方法的速度幾乎能夠快1倍。所以推薦使用列表解析。file

相關文章
相關標籤/搜索