python列表解析属于python的迭代中的一种,列表解析的功能基本上都可以通过for循环来实现,但相比python for循环,列表解析的代码量更少,解析速度更快。
>>> ordinal=[ord(x) for x in 'python']
>>> ordinal
[112, 121, 116, 104, 111, 110]
>>> l=[x**2 for x in range(5)]
>>> l
[0, 1, 4, 9, 16]
2》列表解析中,可以嵌套任意数量的for循环并且关联可选的if条件语句,其中if 条件语句是可选的。
>>> [(x,y) for x in range(5) if x%2==0 for y in range(5) if y%2==1]
[(0, 1), (0, 3), (2, 1), (2, 3), (4, 1), (4, 3)]
3》列表解析和矩阵
>>> matrix
[[1, 2, 3], [4, 5, 6]]
>>> [row[0] for row in matrix] #访问矩阵第一列的元素
[1, 4]
>>> matrix[0] #访问矩阵第一行的元素
[1, 2, 3]
>>> [matrix[row][0] for row in range(len(matrix))] #访问第一列的元素
[1, 4]
4》列表解析与for循环
>>> [(x,y) for x in range(3) for y in range(3)]
[(0, 0), (0, 1), (0, 2), (1, 0), (1, 1), (1, 2), (2, 0), (2, 1), (2, 2)]
上面的列表解析,与下面的for循环功能一致:
>>> l=[]
>>> for x in range(3):
... for y in range(3):
... l.append((x,y))
...
>>> l
[(0, 0), (0, 1), (0, 2), (1, 0), (1, 1), (1, 2), (2, 0), (2, 1), (2, 2)]
5》下面看一个例子:从书籍信息中找最低价格
books=[{"name":u"C#从入门到精通","price":23.7,"store":u"卓越"},
{"name":u"ASP.NET高级编程","price":44.5,"store":u"卓越"},
{"name":u"Python核心编程","price":24.7,"store":u"当当"},
{"name":u"JavaScript大全","price":45.7,"store":u"当当"},
{"name":u"Django简明教程","price":26.7,"store":u"新华书店"},
{"name":u"深入Python","price":55.7,"store":u"新华书店"},
]
#第一种方法是使用二重for循环
price=[]
for item_dict in books:
for key in item_dict:
if key=='price':
price.append(item_dict[key])
print min(price)
#第二种方法是使用列表解析
price=[item_dict[key] for item_dict in books for key in item_dict if key=='price']
print min(price)
当然,也可以采用更加简洁的列表解析,如下:
price=[item_dict['price'] for item_dict in books]
print min(price)
这几种方法,运行的结果都是23.7
(完)