python基础(列表、字典简单推导式)

列表推导

列表推导是一种从其他列表创建列表的方式,类似于数学中的集合推导。列表推导的工作原理非常简单,有点类似于for循环。
>>> [x * x for x in range(10)] 
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81] 
这个列表由range(10)内每个值的平方组成,如果只想打印那些能被3整除的平方值,该如何办呢?可使用求模运算符:如果y能被3整除,y % 3 将返回0(请注意,仅当x能被3整除时,x*x才能被3整除)。为实现这种功能,可在列表推导中添加一条if语句。
>>> [x*x for x in range(10) if x 3 == 0] %
[0, 9, 36, 81] 
还可添加更多的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循环创建同样的列表:
result = [] 
for x in range(3): 
    for y in range(3) 
          result.append((x, y)) 
与以前一样,使用多个for部分时,也可添加if子句。
>>> girls = ['alice', 'bernice', 'clarice'] 
>>> boys = ['chris', 'arnold', 'bob'] 
>>> [b+'+'+g for b in boys for g in girls if b[0] == g[0]] 
['chris+clarice', 'arnold+alice', 'bob+bernice'] 
这些代码将名字的首字母相同的男孩和女孩配对。

更佳的解决方案
前述男孩/女孩配对示例的效率不太高,因为它要检查每种可能的配对。使用Python解决这个问题的方法有很多,下面是Alex Martelli推荐的解决方案:
girls = ['alice', 'bernice', 'clarice'] 
boys = ['chris', 'arnold', 'bob'] 
letterGirls = {} 
for girl in girls: 
     letterGirls.setdefault(girl[0], []).append(girl) 
print([b+'+'+g for b in boys for g in letterGirls[b[0]]]) 

这个程序创建一个名为letterGirls的字典,其中每项的键都是一个字母,而值为以这个字母打头的女孩名字组成的列表(字典方法setdefault在前一章介绍过)。创建这个字典后,列表推导遍历所有的男孩,并查找名字首字母与当前男孩相同的所有女孩。这样,这个列表推导就无需尝试所有的男孩和女孩组合并检查他们的名字首字母是否相同了。

 

字典推导

使用圆括号代替方括号并不能实现元组推导,而是将创建生成器。然而,可使用花括号来执行字典推导。
>>> squares = {i:"{} squared is {}".format(i, i**2) for i in range(10)} 
>>> squares[8] 
'8 squared is 64' 

在列表推导中,for前面只有一个表达式,而在字典推导中,for前面有两个用冒号分隔的表达式。这两个表达式分别为键及其对应的值。

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值