本文共 1650 字,大约阅读时间需要 5 分钟。
python列表解析属于python的迭代中的一种,列表解析的功能基本上都可以通过for循环来实现,但相比python for循环,列表解析的代码量更少,解析速度更快。
1》将一个序列的每一个值代入一个任意表达式中,并将表达式的计算结果收集到一个新的列表中并返回。 >>> 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
(完)
转载地址:http://pdyai.baihongyu.com/