1. 列表里生成器相比range()生成的列表
生成一个列表[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]可用range(1,11)
L = range(1,11) # print L # [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
如果要生成一个[1x1, 2x2, 3x3, ..., 10x10]怎么做?用for循环
L = [] for x in range(1,11): L.append(x*x) # print L # [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
但是循环太繁琐了,列表生成器就一行语句解决问题:
L = [x*x for x in range(1,11)] # 生成列表L=[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
2. 列表生成器中也可以加上if判断
L = [x*x for x in range(1, 11) if x%2 == 0] #print L #[4, 16, 36, 64, 100]
该列表生成器的执行顺序是:先执行for语句,x取到值;然后执行if语句做判断;再执行数学表达式。结果存入列表中。
3. 列表生成器中使用两层循环。
L = [m+n for m in 'ABC' for n in 'XYZ'] # print L # ['AX', 'AY', 'AZ', 'BX', 'BY', 'BZ', 'CX', 'CY', 'CZ']
三层和三层以上的循环就很少用到了。