python列表生成式 作者:马育民 • 2018-11-20 16:45 • 阅读:10155 # 概述 快速生成一个 **简单列表** ,可以用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)] ``` # 语法 列表生成式语法: ``` [exp for item in collection if codition] ``` 相当于下面的原始写法: ``` 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() ``` # 总结 1. 三层和三层以上的循环很少使用 2. 列表生成式将所有的结果全部计算出来,把结果存放到内存中 3. 如果列表中数据比较多,会占用过多的内存空间,可能导致MemoryError内存错误或者导致程序在运行时出现卡顿的情况 原文出处:http://www.malaoshi.top/show_1EF2HTnYjjwS.html