python【5】-生成式,生成器

简介:

一、条件和循环

1. if语句

复制代码
if <条件判断1>:
    <执行1>
elif <条件判断2>:
    <执行2>
else:
    <执行4>
复制代码

例如:

复制代码
age=5
if age>=18:
  print 'adult'
elif age>=6:
  print 'teenager'
else:
  print 'kid'
复制代码

 

一定要注意条件语句结尾的冒号,以及代码段的缩进。

只要if参数是非零数值、非空字符串、非空list等,就判断为True,否则为False

2.循环

range(num):返回0到num-1之间的整数。例如:

print range(5)

>>>[0,1,2,3,4]

 

for循环for x in ...循环就是把每个元素代入变量x,然后执行缩进块的语句。

s=0
for i in range(101):
  s+=i
print s

 

while循环:只要条件满足,就不断循环,条件不满足时退出循环。

复制代码
i=1
s=0

while(i<=100):
  s=s+i
  i=i+1

print s
复制代码

 

3.迭代

dict类型for ..in ..迭代有以下几种方式:

d={'a':1,'b':2,'c':3}

默认迭代key

for k in d:
    print k

 

iterkeys()返回key迭代器

for key in d.iterkeys():
    print key

 

itervalues()返回value迭代器

for value in d.itervalues():
    print value

 

iteritems()返回键值对迭代器

for key,value in d.iteritems():
    print key+"="+str(value)

 

判断对象是否可迭代:通过collections模块的Iterable类型判断

from collections import Iterable
print isinstance(d,Iterable)

 

带下标迭代:Python内置的enumerate函数可以把一个list变成索引-元素对

l=range(5)
for i,value in enumerate(l):

print i,value

 

二、生成式

1.列表生成式

列表生成式是python受欢迎的语法之一,通过一句简洁的语法就可以对一组元素进行过滤,还可以对得到的元素进行转换处理。语法格式为:

[exp for val in collection if condition]

 

相当于

result=[]
for val in collection:
    if(condition):
        result.append(exp)

 

我们看个例子:将列表中的字符串转换为小写组成新的列表。

L=['Hello',10,'World',None]
print [s.lower() for s in L if isinstance(s,str)]
运行结果:  ['hello', 'world']

 

2.字典生成式

字典生成式基本格式如下:

{key-exp:val-exp for value in collection if condition}

 

例如:

print {i:i*10 for i in range(1,10) if(i%2==0)}

运行结果为: {8: 80, 2: 20, 4: 40, 6: 60}

 

3.集合生成式

集合生成式格式和列表生成式类似,只不过用的是大括号:

{exp for value in collection if condition}

 

例如:统计列表中字符串元素的各种长度。

L=['Hello',10,'World',None,'aa']
print {len(x) for x in L if isinstance(x,str)}

运行结果: set([2, 5])

 

4.嵌套列表生成式

嵌套列表生成式要注意for循环的顺序。

例如:我们想提取由两个列表组成的嵌套列表中,含有a的字符串:

L1=[['Cathy','Li'],['Zhang','Wang','Mike','Tom','Jack']]
print [name for list in L1 for name in list  if name.count('a')>0]

运行结果: ['Cathy', 'Zhang', 'Wang', 'Jack']

 

我们还可以将嵌套列表中的数据进行扁平化展现,例如:

L2=[(1,3,5),(2,4,6),(100,200)]
print [value for t in L2 for value in t]

运行结果: [1, 3, 5, 2, 4, 6, 100, 200]

 

发现语法太简洁啦!!

三、生成器

在Python中,有一种自定义迭代器的方式,称为生成器(Generator)。

定义生成器的两种方式:

1.创建一个generator,只要把一个列表生成式的[]改成(),就创建了一个generator:

复制代码
l=[x for x in range(1,10)]
print l

g=(x for x in range(1,10))
print g.next()
print g.next()

for x in g:
    print x

运行结果:
[1, 2, 3, 4, 5, 6, 7, 8, 9]
1
2
3
4
5
6
7
8
9
复制代码

 

generator保存的是算法,每次调用next(),就计算出下一个元素的值,直到计算到最后一个元素,没有更多的元素时,抛出StopIteration的错误。

2.定义generator的另一种方法。如果一个函数定义中包含yield关键字,那么这个函数就不再是一个普通函数,而是一个generator:

复制代码
def fib(n):
    a=1
    b=1
    i=0;

    yield a
    yield b

    while(i<n):
        a,b=b,a+b
        i+=1
        yield b

for x in fib(10):
    print x

运行结果:
1
1
2
3
5
8
13
21
34
55
89
144
复制代码

 

生成器和普通函数区别:

普通函数是顺序执行,遇到return语句或者最后一行函数语句就返回;

而变成generator的函数,在每次调用next()的时候执行,遇到yield语句返回,再次执行时从上次返回的yield语句处继续执行。

复制代码
def test():
    print 1
    yield
    print 2
    yield
    print 3
    yield

t=test()
t.next()#运行结果1
t.next()#运行结果2
t.next()#运行结果3
复制代码


相关文章
|
1月前
|
Python
【Python操作基础】——字典,迭代器和生成器
【Python操作基础】——字典,迭代器和生成器
|
2天前
|
算法 大数据 数据处理
Python 迭代器和生成器有什么用?
**Python 迭代器与生成器巧妙用法** 本文探讨了 Python 中迭代器和生成器的实际应用场景。迭代器通过 `__iter__()` 和 `__next__()` 方法支持迭代操作,适用于处理大数据或动态数据流。例如,创建一个 `CountDown` 类实现倒计时迭代。生成器简化代码,如 `fibonacci` 函数用于生成斐波那契数列。此外,迭代器可用于分页、连接多个迭代器和过滤数据。生成器则擅长处理大文件、生成无限序列和实现斐波那契数列,还可构建数据处理管道和使用生成器表达式。掌握这些技巧能提升代码效率和处理问题的能力
|
6天前
|
存储 开发者 Python
探究Python中的迭代器与生成器
Python中的迭代器和生成器是常见的编程概念,它们为我们提供了一种高效的方式来处理数据集合。本文将深入探讨迭代器和生成器的概念、用法以及它们在Python编程中的实际应用。
|
9天前
|
大数据 数据处理 Python
深入理解 Python 迭代器与生成器:详细指南
深入理解 Python 迭代器与生成器:详细指南
|
10天前
|
索引 Python
python生成器和迭代器
python生成器和迭代器
|
14天前
|
大数据 Python 数据采集
Python中的迭代器与生成器:高效处理大数据集的利器
Python中的迭代器和生成器是处理大数据集时的利器,它们能够高效地处理大量数据而不会占用太多内存。本文将介绍迭代器和生成器的概念、使用方法以及在处理大数据集时的优势,并通过示例代码演示它们的应用。
|
18天前
|
大数据 Python
深入解析Python中的生成器(Generator) 及其高级应用
深入解析Python中的生成器(Generator) 及其高级应用
18 0
|
22天前
|
存储 数据处理 索引
Python生成器:深入理解与应用
Python生成器:深入理解与应用
|
29天前
|
存储 缓存 算法
Python迭代器、生成器
【5月更文挑战第16天】
25 1
|
29天前
|
机器学习/深度学习 人工智能 算法
Python 与 TensorFlow2 生成式 AI(一)(4)
Python 与 TensorFlow2 生成式 AI(一)
53 0