推导式、生成器表达式
列表推导式
-
只适合用于构建比较复杂且有规律的列表,超过三层循环才能构建成功的,就不建议用列表推导式了
-
不能使用debug模式
-
循环模式:[变量 for 变量 in 可迭代对象]
# 1-100之间的偶数写入列表 li=[i for i in range(2,101,2)] print(li) #打印出小仙女1-100号 li1=[f'小仙女{i}号' for i in range(1,101)] print(li1) #将10以内的整数平方写入列表 li2=[i**2 for i in range(1,11) ] print(li2)
-
筛选模式:[变量 for 变量 in 可迭代对象 if 条件]
#打印出30以内能被3整除的数 li3=[i for i in range(1,31) if i%3==0] print(li3) #过滤长度小于3的字符串列表,并将剩下的转换成大写字母 li=['baoli','wang','li','yn'] li1=[i.upper() for i in li if len(i)>3 ] print(li1) #循环出列表中有两个e的元素 name = [["Tom", "Billy", "Thomas"," Jefferson", "Andrew", "Wesley", "Stephen", "Joe"], [" Alice ", "Jill"," Anna ", "Wendy", "Jennifer", "sherry", "Eva"]] li2=[j for i in name for j in i if j.count('e')==2] print(li2)
生成器表达式
- 几乎于列表推导式一模一样,只不过把[]换成了()
obj=(i for i in range(1,11))
for j in obj: #for 循环的时候就已经转换成迭代器
print(j)
列表推导式于生成器表达式的区别
- 写法上的区别([],())
- iterable:可迭代对象 与Iterator:迭代器的区别
字典推导式
list1=['xiaoxiannv','xiaoyun','wangminmin','xiaotong']
list2=['小仙女','小云','王敏敏','小彤']
dic={list1[i]:list2[i] for i in range(len(list1))}
print(dic)
得:{'xiaoxiannv': '小仙女', 'xiaoyun': '小云', 'wangminmin': '王敏敏', 'xiaotong': '小彤'}
集合推导式
tu={i for i in range(1,11)}
print(tu)