1.列表解析式
lst1 = list(range(10))
lst2 = []
for item in lst1:
lst2.append(item+100)
print(lst2)
new_lst1 = [item + 100 for item in lst1]
print(new_lst1 )
- 列表解析是Python迭代机制的一种应用,它常用于实现创建新的列表,因此用在[]中;
- 使用列表解析式,编译器会优化,不会因为简写而影响效率,反而优化提升效率,减少代码量,可读性强,工作量降低,减少出错;
- 带条件判断的列表解析式;
list1 = list(range(100))
list2 = [item + 100 for item in list1 if item %2 == 0 and item %3 ==0]
print(list2)
list3 = [item + 100 for item in list1 if item % 2 == 0 if item % 3 == 0]
print(list3)
lst = []
for i in range(2):
for j in range(2):
lst.append((i, j))
print(lst)
lst = [(i, j) for i in range(2) for j in range(2)]
print(lst)
lst = [(i,j) for i in range(10) if i>2 for j in range(10,15) if j>13]
print(lst)
2.集合解析式
set1 = {(x,x+1) for x in range(10)}
print(set1)
- 集合解析式和列表解析式用法一样,只是集合解析式使用的是{}花括号;
3.字典解析式
dict1 = {'{}'.format(x):x for x in range(10)}
print(dict1)
dict2 = {x:y for x in range(3) for y in range(3)}
print(dict2)
dict3 = {}
for x in range(3):
for y in range(3):
dict3[x] = y
print(dict3)
- 字典解析式也是使用{}花括号括起来的;
- 因为字典有key-value键值对,所以使用字典解析式时key会自动去重;
4.什么是生成器
g = (item for item in range(10))
print(g)
print(next(g))
print(next(g))
....
- 生成器表达式:返回一个对象,这个对象只有在需要的时候才产生结果;
- 生成器的特点是按需计算,惰性求值,最大可能的节约内存空间;
- 生成器是是单迭代器对象,一次只能产生一个值,且每个值只能取一遍,超过次数会报错;
- 生成器和迭代器的相同之处在于都可以通过for循环取值,因此都是可迭代对象;
5.生成器操作
g = (item for item in range(10))
print(g)
value1 = next(g)
print(value1)
value2 = next(g)
print(value2)
print('*'*100)
for item in g:
print(item)
如果你依然在编程的世界里迷茫,
不知道自己的未来规划,
对python感兴趣,
这里推荐一下我的学习交流圈QQ群:895 797 751,
里面都是学习python的,
- 通过next获取值:如果取值的次数超过生成器对象值的长度,则会报错;
- 通过for循环取值:如果生成器对象没有值的时候,for循环会通知迭代,所以不会报错;