python这门语言给我的感觉之一就是高效,往往能够用几行代码就实现别的语言要写好多行代码才能够实现的功能,那么推导式就是我见过的很简便的一种方式,且在别的语言中没有见到过(也主要是因为自己学习的语言没有辣么多,哈哈)。
python中常用的推导式有列表推导式以及字典推导式,接下来我们一一来看推导式神奇的地方。
首先我们来看列表推导式,好比我们现在有一个这样子的需求,要将1-100之间的偶数放在一个数组中,别的语言的常规做法可能就是如下这般了:
list = [];
for value in range(1, 101):
if value % 2 == 0:
list.append(value)
print list;
但是如果我们用推导式来实现呢?只需要一行代码:
print [x for x in range(1, 101) if x % 2 == 0]
是不是非常简单呢?第一次看到这种写法我也觉得很神奇,那有的同学问了,如果我的for循环有嵌套怎么办,或者更复杂的需求怎么办?那咱们再来看一个例子好比我要生成一个列表,而列表里面是一个个的元组,而每个元组的第一个参数是奇数,第二个参数是偶数,且是1-100依次累加,那么常规代码该这么写了:
list = [];
for x in range(1, 101):
for y in range(1, 101):
if x % 2 != 0 and y % 2 == 0:
list.append((x, y))
print(list)
那么咱们的列表推导式呢,还是只需要一行代码了:
print [(x, y) for x in range(1, 101) if x % 2 != 0 for y in range(1, 101) if y % 2 == 0]
简单解释一下,第一个x参数的for循环是外层循环,后面的y的for循环室内层循环,所以其实也相当于一种嵌套,不过写法上简单很多,是不是很妙?
接下来咱们看字典推导式,是的,字典也是可以推导出来的,我们还是看个例子,先用常规代码:
dict = {};
for x in range(1,101):
dict[x] = x;
print dict;
代码意思就是1-100的数字,每个数字既是key也是Value组成一个字典,那么推导式呢,依然只需要一行代码:
print {x: x for x in range(1, 101)};
我们再来看个例子,有这么一个字典students_score = {'jack': 88, 'james': 99, 'leo': 100, 'sam': 66},就是一个学生名字和学生分数的一个字典,现在有个需求就是去取出成绩大于80分的学生姓名以及分数且用字典返回,常规代码如下:
for key,value in students_score.iteritems():
if value > 80:
dict[key] = value;
print dict;
那么推导式呢,就是
print {key: value for key, value in students_score.iteritems() if value > 80}
那么如果只是取出姓名且放在一个数组中呢?
print [x for x, y in students_score.iteritems() if y > 80]
好,以上就是本次内容,如有不对之处欢迎批评指正。