''' 列表推导公式: * 用来生成列表
'''
例1: 生成一个0-9 的列表
a = [ i for i in range(0,10)]
print(a) # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]:
例2:
b = [x for x in range(0,2) for y in range(0,3)]
print(b) # [0, 0, 0, 1, 1, 1]
# d等同于下面代码:
c = []
for x in range(0, 2):
for y in range(0, 3):
c.append(x)
print(c) # [0, 0, 0, 1, 1, 1]
例3:生成元组列表
d = [(x,y) for x in range(0,2) for y in range(0,3)]
print(d) # [(0, 0), (0, 1), (0, 2), (1, 0), (1, 1), (1, 2)]
例4:输出 0-9 之间的偶数
e = [x for x in range(0,10) if x % 2 == 0]
print(e) # [0, 2, 4, 6, 8]
# 等同于:
e = []
for x in range(0,10):
if x % 2 == 0:
e.append(x)
print(e) # [0, 2, 4, 6, 8]
一个小题目:
使用列表推导公式 生成一个 [[1,2,3],[4,5,6],[7,8,9,]...] 的列表最大值在100以内
f = [[ x for x in range(y+1,y+4)] for y in range(0,99) if y%3==0]
print(f)
思路解析: 根据问题分析发现: 1、每个列表只有3元素 2、列表中的最大值是100以内 (range(0,99) 或 range(1,100)) 3、列表中的元素都是依次递增 [[1,2,3],[4,5,6],[7,8,9,]...] 根据 1 中的分析,需要一个生成 3 个元素的循环列表 所以, 就有了 : f = [[x for x in range(1,4)]] 综合 1、2 中的分析得出,程序最后会生成 33 个子列表, 也就是说,需要把 [x for x in range(1,4)] 循环生成33次, 所以,需要新添加一个循环: for y in range(0,99) 由于生成的最大值是100以内,所以使用 range(0,99) 为了保证生成33个子列表, 添加: if y%3==0 目前为止整体列表公式为: f = [[ x for x in range(1,4)] for y in range(0,99) if y%3==0] 执行结果: [[1,2,3],[1,2,3],[1,2,3]...] 不符合 [[1,2,3],[4,5,6],[7,8,9,]...] 也就是说 for x in range(1,4) 中的 range 的取值范围是和 y 的值有关系的 y = 0 -> range(1,4) -> [[1,2,3]] y = 1 y = 2 不符合 if y%3==0 条件,所以不会执行 [ x for x in range(1,4)] y = 3 -> range(1,4) -> [[1,2,3],[4,5,6]] y = 4 y = 5 y = 6 -> range(1,4) -> [[1,2,3],[4,5,6],[7,8,9]] y = 3时发现, range(4,7) -> [4,5,6] range(y + 1 = 4, y + 4 = 7) -> [4,5,6] y = 6时发现, range(7,10) -> [7,8,9] range(y + 1 = 7, y + 4 = 10) -> [7,8,9] 所以,修改公式: [ x for x in range(y+1,y+4)]