列表推导式语法:

[表达式 for 变量 in 序列或迭代对象]
列表推导式在逻辑上相当于一个循环

  1. alist = [x * x for x in range(10)]
  2. 相当于:
  3. alist = []
  4. for x in range(10):
  5. alist.append(x*x)
  6. 也等价于:
  7. alist=list(map(lambda x: x*x,range(10)))

使用列表推导式实现嵌套列表的平铺

  1. vec=[[1,2,3],[4,5,6],[7,8,9]]
  2. [num for elem in vec for num in elem]
  3. [1,2,3,4,5,6,7,8,9]
  4. 等价于:
  5. vec=[[1,2,3],[4,5,6],[7,8,9]]
  6. result=[]
  7. for elem in vec:
  8. for num in elem:
  9. result.append(num)
  10. result
  11. [1,2,3,4,5,6,7,8,9]

过滤不符合条件的元素

  1. 列出当前文件夹下所有的 .py 文件
  2. import os
  3. [filename for filename in os.listdir(‘.’) if filename.endswith(‘.py’)]
  4. 从列表中选择符合条件的元素组成新的列表:
  5. alist = [ -1, -4,6, 7.5, -2.3, 9, -11 ]
  6. [i for i in alist if i>0]
  7. [ 6, 7.5, 9]
  8. scores = {'zhang shan':45 , 'li si':78 , 'wang wu':40}
  9. highest = max(scores.values()) #求最高分
  10. lowest = min(scores.values()) #求最低分
  11. average = sum(scores.values())/len(scores) #求平均分
  12. highestPerson = [name for name, score in scores.items() if score == highest]
  13. highestPerson
  14. [‘li si’]

实现多序列元素的任意组合

  1. [(x,y) for x in (1,2,3) for y in (3,1,4) if x!=y]
  2. [(1,3), (1,4), (2,3), (2,1), (2,4), (3,1), (3,4)]

实现矩阵转置

  1. matrix = [[1,2,3,4], [5,6,7,8], [9,10,11,12]]
  2. [[row[i] for row in matrix] for i in range(4)]
  3. [[1,5,9], [2,6,10], [3,7,11], [4,8,12]]
  4. 相当于:
  5. list(map(list,zip(*matrix)))
  6. [[1,5,9], [2,6,10], [3,7,11], [4,8,12]]

列表推导式中可以使用函数或复杂表达式

  1. def f(v):
  2. if v%2 == 0:
  3. v = v**2
  4. else:
  5. v = v+1
  6. return v
  7. print([f(v) for v in [2,3,4,-1] if v>0])
  8. [4,4,16]
  9. print([v**2 if v%2==0 else v+1 for v in [2,3,4,-1] if v>0])
  10. [4,4,16]

列表推导式支持文件对象的迭代

  1. fp = open(‘c:\install.log’,’r’)
  2. print([line for line in fp])
  3. fp.close()

列表推导式生成 100 以内的素数

  1. import math
  2. list1=[ p for p in range(2,100) if 0 not in [p%d for d in range(2,p)]]
  3. print(list1)
  4. for p in range(2,100):
  5. for d in range(2, p):
  6. if 0==p%d:
  7. break
  8. else:
  9. print(p)