列表推导式和生成器表达式
#用普通方法实现打印1-10的数,引出列表推导式.
l1 = []
for i in range(11):
l1.append('python班%s' % i)
print(l1)
列表推导式和生成器表达式
列表推导式:
li = [i for i in range(1,12)]
print(li)
#一行搞定,列表推导式:用列表推导式能够构建的任何列表,用别的都可以构建.
# 因为,一行,感觉高级,但不易排错
生成器表达式:
l_obj = ('python%s' % i for i in range(1,12))
# print(l_obj) #这样打印是看不出来的,因为是生成器,
print(l_obj.__next__())
print(l_obj.__next__())
print(l_obj.__next__())
print(l_obj.__next__())
俩者之间的区别:
生成器表达式:不易看出,节省内存,写法是()
列表推导式:一目了然,占内存,写法是[],所以建议多联系用列表推导式
列表推导式和生成器表达式的规定模式,写法
1.循环模式;
#[经过加工的i for i in 可迭代对象]
li1 = ['python%s' % i for i in range(1,12)] # 排错看不出来
print(li1)
2.筛选模式:
[经过加工的i for i in 可迭代对象 if 条件 筛选]
l2 = [i for i in range(1,101) if i % 3 == 0]
print(l2)
问题: 计算嵌套列表中,元素包含俩个e的,给打印出来
names = [['Tom', 'Billy', 'Jefferson', 'Andrew', 'Wesley', 'Steven', 'Joe'],
['Alice', 'Jill', 'Ana', 'Wendy', 'Jennifer', 'Sherry', 'Eva']]
l5 = [name for i in names for name in i if name.count('e') == 2]
print(l5)
列表推导式最多不超过三个循环,判断只能用一个
字典推导式
mcase = {'a': 10, 'b': 34}
mcase_frequency = {mcase[k]: k for k in mcase}
print(mcase_frequency)
集合推导式
例题:计算列表中每个值的平方,自带其中功能
squared = list({x**2 for x in [1, -1, 2]}) #求这个列表里面的平方,去重,然后又转换为一个列表
print(squared)
返回:[1