列表推导式和生成器表达式

主要内容:

  1,列表推导式

  2,生成器表达式

l = [i for i in range(10)]
print(l)  # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
l1 = ['选项%s' % i for i in range(10)]
print(l1)

 

1,把列表解析的[]换成()得到的就是生成器表达式

2,列表解析与生成器表达式都是一种便利的编程方式,只不过生成器表达式更节省内存

3,Python不但使用迭代器协议,让for循环变得更加通用.大部分内置函数,也是使用迭代器协议访问对象的.例如:sum函数是Python的内置函数,该函数使用迭代器协议访问对象,而生成器实现了迭代器协议,所以我们可以直接这样计算一系列值的和:

a = sum(x**2 for x in range(4))
print(a)

各种推导式:

  列表推导式:

例一: 30以内所有能被3整除的数

l1 = [i for i in range(31) if i % 3 is 0]
print(l1)

例二:30以内所有能被3整出的数的平方

l2 = [i**2 for i in range(31) if i % 3 is 0]
print(l2)

例三:找到嵌套列表中的名字含有两个"e"的多有名字

names = [['Tom', 'Billy', 'Jefferson', 'Andrew', 'Wesley', 'Steven', 'Joe'],
         ['Alice', 'Jill', 'Ana', 'Wendy', 'Jennifer', 'Sherry', 'Eva']]
l3 = [el for item in names for el in item if el.count("e") == 2]
print(l3)

  字典推导式:

例一:讲一个字典的key和value对调

dic = {'name': "chenrun", 'age': 18}
dic1 = {dic[k]:k  for k in dic}
print(dic1)

例二:合并大小写对应的value的值,将k统一成小写

mcase = {'a': 10, 'b': 34, 'A': 7, 'Z': 3}
mcase1 = {i.lower(): mcase.get(i.lower(), 0) + mcase.get(i.upper(), 0) for i in mcase}
print(mcase1)  # 没有该元素会返回指定值0

  集合推导式

例:计算列表中每个值的平方,自带去重功能

s = {x**2 for x in [1,-1,2]}
print(s)  # {1, 4}

练习题:

1,过滤掉长度小于3的字符串列表,并将剩下的转换成大写字母

s = ['13', 'sfsdfsdfs', 'sf', 'sdfsdfsdfs']
l1 = [item.capitalize() for item in s if len(item) > 2]
print(l1)

2,求(x,y)其中x是0-5之间的偶数,y是0-5之间的奇数组成的元组列表

l = [(2,3), (1,1), (6,6), (6,7)]
l1 = [item for item in l if ((item[0] <= 5 and item[0] >= 0) and (item[1] <= 5 and item[1] >= 0)) and (item[0]%2 is 0 and item[1]%2 is 1)]
print(l1)

3,求M中3,6,9组成的列表

M = [[1,2,3],[4,5,6],[7,8,9],[1,1,1]]
l1 = [item for item in M if 3 in item or 6 in item or 9 in item]
print(l1)

 

posted @ 2018-06-20 13:43  猴里吧唧  阅读(202)  评论(0编辑  收藏  举报