Python-02 生成器表达式,列表推导式

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

列表推导式,生成器表达式
1,列表推导式比较直观,占内存
2,生成器表达式不容易看出内容,省内存.

[ 变量(加工后的数据) for  变量i  in 可迭代的数据类型 ] 列表的推导式, 循环模式
[ 变量(加工后的数据) for  变量i  in 可迭代的数据类型 if 条件] 列表的推导式, 筛选模式

1.[变量(加工后的变量) for 变量 in iterable] 循环模式

l = [i for i in range(10)]
print(l)
l1 = ['选项%s'%i for i in range(10)]
print(l1)
l3 = [ 'python%s期' % i for i in range(1, 14)]
# print(l3)

   优点:
  1,节省代码,一行搞定.
   2,看着高大上.
   缺点:
   不好排错.

整体:
 凡是用列表推导式构造的列表对象,用其他方式都可构建.,非常复杂的列表,列表推导式是构建不出的,

2.[变量(加工后的变量) for 变量 in iterable if 条件] 筛选模式

l1 = [i for i in range(1, 31) if i % 3 == 0]
# print(l1)
# 10以内所有数的平方
# print([i*i for i in range(11)])
# 30以内所有能被3整除的数的平方
# print([i**2 for i in range(31) if i % 3 == 0])
# 100 以内所有的奇数.
# print([i for i in range(1,101,2)])
# print([i for i in range(101) if i % 2 == 1])

  生成器表达式:

g_obj = ('python%s期' % i for i in range(1,14)) # 循环模式
g_obj1 = ('python%s期' % i for i in range(1,14) if i % 2 == 0) # 筛选模式
# print(g_obj)
# print(g_obj.__next__())
# print(g_obj.__next__())
# print(g_obj.__next__())
# print(g_obj.__next__())
# for i in g_obj1:
#     print(i)

  生成器:两种方式:
     生成器函数. yield
     生成器表达式
   为什么有生成器:
  生成器本身是自己用python代码构建的,这样就满足了个性化需求,满足以后你工作中需要.

列表推导式

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

multiples = [i for i in range(30) if i % 3 is 0]
print(multiples)
# Output: [0, 3, 6, 9, 12, 15, 18, 21, 24, 27]

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

def squared(x):
    return x*x
multiples = [squared(i) for i in range(30) if i % 3 is 0]
print(multiples)

例三:找到嵌套列表中名字含有两个‘e’的所有名字

names = [['Tom', 'Billy', 'Jefferson', 'Andrew', 'Wesley', 'Steven', 'Joe'],
         ['Alice', 'Jill', 'Ana', 'Wendy', 'Jennifer', 'Sherry', 'Eva']]

print([name for lst in names for name in lst if name.count('e') >= 2])  # 注意遍历顺序,这是实现的关键
 

 字典推导式

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

mcase = {'a': 10, 'b': 34}
mcase_frequency = {mcase[k]: k for k in mcase}
print(mcase_frequency)

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

mcase = {'a': 10, 'b': 34, 'A': 7, 'Z': 3}
mcase_frequency = {k.lower(): mcase.get(k.lower(), 0) + mcase.get(k.upper(), 0) for k in mcase.keys()}
print(mcase_frequency)

  

集合推导式

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

squared = {x**2 for x in [1, -1, 2]}
print(squared)
# Output: set([1, 4])

  

原文地址:https://www.cnblogs.com/liuye1990/p/9203751.html