python 列表生成式
2015-12-09 by dongnan
开始之前
列表生成式是 python
内置可以用来创建 list
的生成式。
举个栗子
单层循环
>>> list1 = [1,2,3,5,6]
>>> [i*i for i in list1]
[1, 4, 9, 25, 36]
使用变量
# 生成 url列表
pn_start = 1
pn_end = 53
u = "http://tieba.baidu.com/p/2476521385?pn=%s"
urls = [u % i for i in range(pn_start, pn_end+1)]
['http://tieba.baidu.com/p/2476521385?pn=1', '...']
列表中的列表
# 字符串
>>> l1
['OMA,CentOS,58.83.xxx.36,10.0.0.1,10.0.11.219,Dell R620,Intel Xeon E5,2,8,100,,物理机,,,',
'OMA2,CentOS,58.83.xxx.36,10.0.0.1,10.0.11.219,Dell R620,Intel Xeon E5,2,8,100,,物理机,,,']
# 列表
>>> [f.split(',') for f in l1]
[
['OMA', 'CentOS', '58.83.xxx.36', '10.0.0.1', '10.0.11.219', 'Dell R620', 'Intel Xeon E5', '2', '8', '100', '', '物理机', '', '', ''],
['OMA2', 'CentOS', '58.83.xxx.36', '10.0.0.1', '10.0.11.219', 'Dell R620', 'Intel Xeon E5', '2', '8', '100', '', '物理机', '', '', '']
]
带有 if ... else 条件
# 获得目录中的png文件
files = [i for i in os.listdir('./') if i.endswith(".png")])
两层循环
>>> [m+n for m in 'ABC' for n in '1']
['A1', 'B1', 'C1']
嵌套的列表生成式
>>> a
{2011: {9: 1.1, 10: 1.001}}
>>> [j for i in a.values() for j in i.values() ]
[1.1, 1.001]
注意,第二个循环调用了第一个循环中的变量i ,注意它们的位置否则会遇到 NameError: name 'i' is not defined
问题。