Python列表解析

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


(完)

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值