概述
快速生成一个 简单列表 ,可以用range()生成,比如生成[0,1,2,3,4,5],可以通过list(range(6))实现
但生成较 复杂列表 ,就需要进行处理操作,比如生成[0, 2, 4, 6, 8, 10, 12, 14, 16, 18],就需要做如下编码:
l=[]
for item in range(10):
l.append(item*2)
或者
l=[]
for item in range(0,20,2):
l.append(item)
print(l)
在python中,可以通过 列表生成式,用一行代码实现上面的功能,如下:
l=[item*2 for item in range(10)]
或者
l=[item for item in range(0,20,2)]
语法
列表生成式语法:
[表达式 for 变量 in 可迭代对象]
或
[表达式 for 变量 in 可迭代对象 if 条件]
相当于下面的原始写法:
l=[]
for item in collection:
if codition:
l.append(item)
问题1
生成一个list,其元素是0-9的数字
即:[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
原始写法
l=[]
for item in range(0,10):
l.append(item)
print(l)
列表生成式写法
l=[item for item in range(0,10)]
问题2
生成一个list,其元素是0-9的偶数
即:[0, 2, 4, 6, 8]
原始写法
l=[]
for item in range(0,10):
if item%2==0:
l.append(item)
print(l)
列表生成式写法
l=[item for item in range(0,10) if item%2==0]
问题3
将下面的代码改成列表生成式
l=[]
for item in range(0,10):
if item%2==0:
l.append(item*item)
print(l)
结果:[0, 4, 16, 36, 64]
列表生成式写法
l=[item*item for item in range(0,10) if item%2==0]
问题4
将下面的代码改成列表生成式
l=[]
for item in range(0,3):
for item2 in range(3,5):
l.append(item*item2)
print(l)
结果:[0, 0, 3, 4, 6, 8]
列表生成式写法
l=[ item*item2 for item in range(0,3) for item2 in range(3,5)]
结果:[0, 0, 3, 4, 6, 8]
创建进程(作为了解)
plist=[Process(target=buy,args=(num,)) for item in range(count)]
for item in plist:
item.start()
for item in plist:
item.join()
总结
- 三层和三层以上的循环很少使用
- 列表生成式将所有的结果全部计算出来,把结果存放到内存中
- 如果列表中数据比较多,会占用过多的内存空间,可能导致MemoryError内存错误或者导致程序在运行时出现卡顿的情况