跳转至

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 问题。

回到页面顶部