1.列表生成式
概念:列表生成式是快速生成列表的一个公式
1.1.生成 1-100的列表
普通实现:
listData = [i for i in range(1,101)]
print(listData)
结果:[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100]
列表生成式实现:
listData = [i for i in range(1,101)]
listData
结果:同上
1.2取出所有带a的
list1 = ['asd','sdf','freg','sfag','refv','aser','sdfr','dfgi']
#取出所有带a的
#普通写法
rs_list = []
for s in list1:
if 'a' in s:
rs_list.append(s)
print(rs_list)
#列表生成式
list2 = [x for x in list1 if 'a' in x]
print(list2)
1.3 双重for循环
普通写法:
list = []
for x in range(0,10)
for y in range(10,20)
s = x * y
list.append(s)
list
列表生成式写法:
list = [x*y for x in range(0,10)for y in range(10,20]
list
2.字典生成式
#for循环遍历列表,将列表中小元组key和value取出,作为字典中的key:value
list4 = [('name','zhangsan'),('age',22),('phone',110)]
list = {key:value for key,value in list4}
list
3.列表生成器和列表生成式的区别
列表生成式:会将所有的结果全部计算出来,把结果存放到内存中,如果列表中数据比较多,会占用过多的内存空间,可能导致MemoryError内存错误或者导致程序在运行时出现卡顿的情况;将列表生成式的 [] 改成 ()就是一个生成器
列表生成器:会创建一个列表生成器对象,不会一次性的把所有结果都计算出来,如果需要序号获取数据,可以使用next()函数来获取,但要注意,一旦next()函数获取不到数据,会导致出现StopIteration异常错误,可以使用 for循环遍历生成器对象,获取所有数据 视情况而定,如果数据量比较大,推荐使用生成器;python2.7中就是 range(生成式) 和xrange(生成器) 的区别
代码:
generator = (i for i in range(10))
print(next(generator))
print(next(generator))
# for x in generator:
# print(x)
结果:0 1
#2 3 4 5 6 7 8 9
4.generator生成器的第二种表现形式 --- 生成器函
生成器函数用next调用
def fun():
for i in range(1,100):
print("模拟一个耗时操作")
yield
next(fun())