python列表生成式

概述

快速生成一个 简单列表 ,可以用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()

总结

  1. 三层和三层以上的循环很少使用
  2. 列表生成式将所有的结果全部计算出来,把结果存放到内存中
  3. 如果列表中数据比较多,会占用过多的内存空间,可能导致MemoryError内存错误或者导致程序在运行时出现卡顿的情况

原文出处:/show_1EF2HTnYjjwS.html