python学习笔记 day14 各种推导式

列表推导式

之前说的列表推导式是【每一个元素或者与该元素相关的操作 for 元素 in 可迭代对象】----遍历

现在在来讲一种新的列表推导式,【满足条件的元素或者与该元素相关的操作  for 元素 In 可迭代对象 if 元素满足某种条件 】-----筛选

现在有一种需求:要求使用列表推导式生成一个列表,列表中的元素是0-30中可以被3整除的数:

L=[i for i in range(30) if i % 3==0]
print(L)

其实很简单,就是在原来的基础上加一层if判断进行筛选,

运行结果:

那如果是想生成一个0-30之间可以被3整除的数的立方呢:

L=[i**3 for i in range(30) if i%3==0 ]
print(L)

运行结果:

现在难度上升一下,有一个嵌套列表,要求输出名字里面含有2个e的名字(使用列表推导式)

names=[['Toms','Billy','Jefferson','Andrew','Wesley','Steven','Joe'],['Alice','Jill','Ana','Wendy','Jennifer','Sherry','Eva']]
results=[name for i in names for name in i if name.count('e')==2]
print(results)

运行结果:

对于这种嵌套的列表,如果想使用列表推导式作用于每一个元素,就得使用两层循环,需要注意外层循环写在前,内层循环写在后;

字典推导式

字典推导式和列表推导式很相近,就是所用的符号是{},里面不再是单一的元素,而是一个键值对的形式:

现在有一个需求,就是把字典中的键值对颠倒过来组成一个新的字典(使用字典推导式)

dict={'a':1,'b':2,'c':3}
d={dict[k]:k for k in dict}
print(d)

运行结果:

 但是如果我们不仅需要把原来字典的键值对颠倒过来,还想把新的字典中的值(字符串组成)全部大写组成一个新字典在输出(使用字典推导式)

dict={'a':1,'b':2,'c':3}
d={dict[k]:k.upper() for k in dict}
print(d)

运行结果:

 如果想把一个字典 {k由字母组成,value由数字组成} 中大小写对应的value值合并(相加),并且key全部大写输出:

dict={'a':10,'b':20,'c':30,'e':40,'B':10,'A':20,'X':100}
d={key.upper():(dict.get(key.upper(),0)+dict.get(key.lower(),0))for key in dict}
print(d)

运行结果:

这里与用到之前的dict.get(key,0)函数:字典dict中由key 就返回key对应的value,没有就返回默认值0:

dict={'a':100,'b':200}
print(dict.get('b','字典中没有该键时返回的值'))
print(dict.get('c','字典中没有该键时返回的值'))

运行结果:

集合推导式

集合推导式和列表推导式很像,就是括号不一样(列表推导式采用中括号【】,生成器表达式使用圆括号(),字典表达式采用花括号 {},里面含有键值对),该集合推导式采用花括号{}(与字典推导式不同的是,里面不放键值对,放的是普通元素)

只不过集合推导式可以对元素去重

现有一个需求,需要对原列表中的元素取平方,然后去重:

lst=[1,-1,2,-2,3,4]
set={i**2 for i in lst}  #集合推导式可以去重
print(set)
L=[i**2 for i in lst]
print(L)

运行结果:

猜你喜欢

转载自www.cnblogs.com/xuanxuanlove/p/9591788.html