列表解析和生成器表达式

列表解析

  1. 列表解析表示你可以在一行中使用for循环将所有的值放在一个列表中。

    列表解析属于python迭代中的一种,相比for循环会快很多

    a = [x+2 for x in range(10)]

    等价于

    a=[]

    for i in range(10):

        a.append(i+2)

  2. 列表解析比for循环解析列表的代码量会更少,解析速度会更快,写起来更酷。

  3. 也可以在列表解析中加入判断条件

    L = [(x+1,y+1) for x in range(3) for y in range(3)]

    N = [x+10 for x in range(10) if x>5]

生成器表达式

  1. 生成器表达式和列表解析基本一样,只不过生成器表达式是(),并且生成器表达式,在需要列表值的时候才生成。应用于列表值太多的情况,避免内存的浪费。生成器表达式,并不是真正的创建了数字列表,而是返回一个生成器,这个生成器在每次计算出一个条目后,把这个条目yield出来。生成器表达式使用惰性计算,只有在检索时才被赋值。

    L = (i+1 for i in range(10) if i%2)

  2. 复制列表 使用L1 = list(L) 或者L1 = L[:]不必使用L1=[x for x in L]
  3. 如果对每个元素都调用并且返回结果时,应使用L1 = map(f,L),而不是L1 = [f(x) for x in L]

你可能感兴趣的:(列表解析和生成器表达式)