推导式即是 Python 内置的非常简单却强大的可以用来创建集合的语法,比如我们要生成 [0x0, 1x1, 2x2, 3x3, ..., 10x10] 这样的一个 list,我们可以写个函数通过循环来实现,Python 语言提供了更高级的语法,我们不需要写函数,可以直接把语法写在推导式内部可以生成我们想要的集合。
我们可以用推导式生成 list,set,或 dict 集合,对于 tuple 是生成器(我们下节介绍)。
比如我们想生成一个 [0x0, 1x1, 2x2, 3x3, ..., 10x10] 的 list,我们可以写个 for 循环来实现。
mylist = [] for item in range(0, 11): mylist.append(item * item) print(mylist)
如果我们使用 list 推导式来实现以上需求,则只需要一句话,哥就问你装逼不装逼。
mylist = [item * item for item in range(0, 11)] print(mylist)
比如我们想把 ['Hello', "老鸟Python", 2, ["Ok"]
中是字符串类型的成员的变成大写字母,代码要短,我用推导式。
mylist = ["Hello", "老鸟Python", 2, ["Ok"]] myupperlist = [item.upper() if isinstance(item, str) else item for item in mylist] print(myupperlist)
我们知道使用中括号 [] 可以编写列表推导式,同样用大括号 {} 可以生成字典推导式。
mydict = {item: item * item for item in range(0, 11)} print(mydict)
我们也可以用 set([]) 来作为集合推导式来生成 set。
myset = set([item * item for item in range(0, 11)]) print(myset)
会使用各种推导式,特别是 list 推导式。
要清楚推导式里面支持的语法。
著名公司(某兴)笔试题:用列表推导式写出99乘法表,打印出效果如下。
推导式是写起来比较简单,但是debug是查看变量比较头疼
#coding:utf-8 #创建一个列表,把所有乘法表中的表达式都放在里面 sheet=[] for y in range(1,10): for x in range(1,10): if x<=y: sum=x*y expression=str(x)+"*"+str(y)+"="+str(sum) row=x column=y sheet.append((expression,row,column)) #调整格式 for expression,row,column in sheet: if row==column: print expression else: print expression,
用推导式去做啊,还有这个是 py3 教程,你这个 print 语法是 py2 的,可以提交到 py2 教程里面。
观感上有点像linq?
想知道推导式为啥快。
推导式里的for不一样吗,和快之有,只是为了看着高大上,语法糖而已
for i in range(1,10): mylist = []; for k in range(i,10): pass sum = i * k; mylist.append(str(i) + " X " + str(k) + " = " + str(sum))