Python 列表集合 字典推导式、生成器表达式

Python 列表集合 字典推导式、生成器表达式

列表推导式

  1. 循环模式
 l1 = [i for i in range(1,11)]
 l2 = [i ** 2 for i in range(100)]
 l3 = [f'python{i}' for i in range(50)]
  1. 筛选模式:

    l1 = [i for i in range(1,31) if i % 3 == 0]
    
  2. 嵌套循环:

    names = [['tom','billy','jefferson'],['wesley','steven','jennifer']]
    
    e = [ name for i in names for name in i if name.count('e') == 2]
    
    e = ['jefferson','wesley','steven','jennifer']
    

生成器表达式 # [] 变 ()

  1. 循环模式:

    g = (i for i in range(1,11))
    print(next(g))         #1 
    print(next(g))		   #2
    
  2. 筛选模式

    g = (i for i in range(50) if ...)
    
    print(next(g))         #1 
    print(next(g))		   #2
    

优缺点:

  1. 列表推导式-缺点:

    ​ 有毒,不要太着迷

    ​ 超过三层循环才能构建成功的,不建议使用

    ​ 无法使用Debug 进行排错

  2. 列表推导式-优点:

    ​ 一行结构,简单

    ​ zb (23..)

    porker = [ i for i in range(2,11)] + list('JQKA')
    # [2, 3, 4, 5, 6, 7, 8, 9, 10, 'J', 'Q', 'K', 'A']
    

列表推导式和生成器表达式的区别:

写法上 [] ()

iterable iterator

字典推导式:

list1 = ['jay','jj','meet']
list2 = ['周杰伦','林俊杰','panda']
mdict = {list2[i]: list[1] for i in range(len(list1))}
#{'周杰伦': 'jay', '林俊杰': 'jj', 'panda': 'meet'}

集合推导式:

{i for i in range(1,11)}
原文地址:https://www.cnblogs.com/pandaa/p/12038430.html