Python 列表推导公式

'''

    列表推导公式:
    
        * 用来生成列表

'''

例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)]

猜你喜欢

转载自blog.csdn.net/shihongji/article/details/80264625