列表推导式
格式:变量名 = [循环的变量名(i) for 循环语句]
test_list = ['这是第%s个数字'%i for i in rang(10)] print(test_list) #等同于下面的代码 for i in range(10) print('这是第%s个数字'%i)
生成器表达式
格式:变量名 = (循环的值(i) for循环语句)
注意:
1、和列表推导式的区别是"[]" 和 "()"
2、变量的返回值不一样,生成器表达式返回的值是生成器
3、比列表推导式更省内存空间,几乎不占内存
4、缺陷是无法直观的看到内部的值
g = (i for i in rang(10)) # 获取到的是一个生成器 foi i in g: print(i) # 等同于下面代码 def gen(): for i in rang(10): yield i g=gen() for i in g: print(i)
各种推导式:注:没有元组推导式,因为如果使用了()就变成了生成器列表器
注意:写法都是一样的,仅是包围的括号不一样
扫描二维码关注公众号,回复:
5475689 查看本文章
列表推导式
格式:l = [每个元素或者是和元素相关的操作 for 元素 in 可迭代数据类型]----遍历所有元素
完整的推导式:l = [满足条件的元素相关操作 for 元素 in可迭代数据类型 if 元素相关的条件]-----筛选元素
# 30 以内所有能被3整除的数 l = [i for i in range(30) if i%3 == 0] for i in l: print(i) # 等同于以下代码 for i in range(30): if i%3 == 0 : print(i)
进阶:循环取嵌套列表中的值
#例子:找到嵌套列表中名字含有两个‘e’的所有名字 ls = [['eae','egg','eee'],['eeg','e','ee']] for i in ls: for ii in i: if ii.count('e')>=2: print(ii) #列表推导式:先循环最外面的列表,再循环里面的小列表,就算是三层嵌套也一样 l = [ii for i in ls for ii in i if ii.count('e')>=2 ] print(l)
字典推导式
# 对调一个字典的key和value值 dic = {'a':10,'b':20} for k in dic: print(dic[k]) print(dic[k]:k) # dic[k]获取到的是字典里的Value print(dic) #字典推导式 dic = {dic[k]:k for k in dic} #合并大小写对应的value值,将k统一成小写 dic = {'a':1,'b':2,'c':3,'A':1,'C':3} #题意解析:大小写相同的key对应的Value值相加,然后将Key统一成小写 for k in dic: print({k.lower():dic.get(k.lower(),0)+dic.get(k.upper(),0)}) #字典推导式 dic = {k.lower():dic.get(k.lower(),0)+dic.get(k.upper(),0) for k in dic} print(dic)
集合推导式: 自带结果去重功能
#例:计算列表中每个值的平方 test = {x**2 for x in [1,-1,2]} print(test)