文档章节

Python列表生成式和生成器

p
 peizh
发布于 2017/11/03 23:38
字数 380
阅读 22
收藏 0

 

1、 生成式

li = [x*x for x in xrange(1,10) if x%2 == 0]
print(li)

 

结果:

[4, 16, 36, 64]

 

def funa():

    a = []

    for x in xrange(1,10):

        if x%2 == 0:

            a.append(x*x)

    return a



print(funa())

结果:

[4, 16, 36, 64]

 

 

2、 生成器

#列表生成器

#1. 最简单的方法,把原来的生成式的[]换成()就OK了

lt = (x * x for x in xrange(1,101) if x % 2 == 0)

print(lt)

print(type(lt))

print(lt.next())

print(lt.next())

print(lt.next())

print(lt.next())

结果:

<generator object <genexpr> at 0x03161A80>

<type 'generator'>

4

16

36

64

 

 

生成器可以用for循环调用

# for i in lt:

#     print(i)

 

#2. 函数中定义列表生成器

 

def fib(n):

    sum = 0

    i = 0

    while(i<n):

        sum = sum + i

        i+=1

        # print(sum)

        yield (sum)

fib(10)

print(type(fib(10)))

结果:

<type 'generator'>

# for i in fib(10):

#     print(i)

For循环结果:

 

0

1

3

6

10

15

21

28

36

45

 

3、 用函数实现9*9乘法口诀

 

def sumsum(i):

    if i >=1:

        sumsum(i - 1)

        print(['%d * %d = %d' %(j, i, j*i) for j in xrange(1,i+1)])



sumsum(9)

结果:

['1 * 1 = 1']

['1 * 2 = 2', '2 * 2 = 4']

['1 * 3 = 3', '2 * 3 = 6', '3 * 3 = 9']

['1 * 4 = 4', '2 * 4 = 8', '3 * 4 = 12', '4 * 4 = 16']

['1 * 5 = 5', '2 * 5 = 10', '3 * 5 = 15', '4 * 5 = 20', '5 * 5 = 25']

['1 * 6 = 6', '2 * 6 = 12', '3 * 6 = 18', '4 * 6 = 24', '5 * 6 = 30', '6 * 6 = 36']

['1 * 7 = 7', '2 * 7 = 14', '3 * 7 = 21', '4 * 7 = 28', '5 * 7 = 35', '6 * 7 = 42', '7 * 7 = 49']

['1 * 8 = 8', '2 * 8 = 16', '3 * 8 = 24', '4 * 8 = 32', '5 * 8 = 40', '6 * 8 = 48', '7 * 8 = 56', '8 * 8 = 64']

['1 * 9 = 9', '2 * 9 = 18', '3 * 9 = 27', '4 * 9 = 36', '5 * 9 = 45', '6 * 9 = 54', '7 * 9 = 63', '8 * 9 = 72', '9 * 9 = 81']

 

 

 

 

 

 

© 著作权归作者所有

p
粉丝 2
博文 30
码字总数 17001
作品 0
闸北
私信 提问
python生成式生成器详细解答

Python得yield关键字,yield是python中的生成器 了解生成器需要先了解什么是生成式,切片的目的是从已有的列表中切出一部分返回,而生成式的目的则是从无到有的构建一个列表 一个生成式的案例...

开源中国段子手
2015/07/21
88
0
python(六)切片,生成式,生成器,迭代

有了前面的基础,其实掌握的比较扎实的话还是能够做出一些简单的东西的,至少解决一些个基本的数学题还是问题不大,比如说实现一个斐波那契数列,杨辉三角什么的。多数情况下使用循环 for .....

Koma
2015/01/20
2K
0
Python迭代器生成器,私有变量及列表字典集合推导式(二)

1 python自省机制 这个是python一大特性,自省就是面向对象的语言所写的程序在运行时,能知道对象的类型,换句话说就是在运行时能获取对象的类型,比如通过 type(),dir(),getattr(),hasattr(),i...

善良小郎君
2018/06/11
0
0
python——高级特性(2)

迭代 在python中迭代是通过for ....in...完成的,只要是可迭代对象都可以迭代 #!usr/bin/python 008000;">-- coding:UTF-8 -- #tuple迭代t=[(1,'a','z'),(2,'b','z')]for x,y,z in t: #enume......

乌云上
2018/05/04
0
0
Supporting Python 3(支持python3)——使用现代的风格改善你的代码

使用现代风格改善你的代码 原文: http://python3porting.com/improving.html 译者: TheLover_Z 一旦你开始使用 Python 3,你就有机会接触新的特性来改善你的代码。这篇文章中提到的很多东西...

在湖闻樟
2015/10/26
130
0

没有更多内容

加载失败,请刷新页面

加载更多

STM32进阶之串口环形缓冲区实现

队列的概念 在此之前,我们来回顾一下队列的基本概念: 队列 (Queue):是一种先进先出(First In First Out ,简称 FIFO)的线性表,只允许在一端插入(入队),在另一端进行删除(出队)。 队列...

杰杰1号
25分钟前
10
0
设计模式-建造者模式

建造者模式 定义 将一个复杂对象的构建和它的表示分离,使得同样的构建过程创建出不同的表示。这句话理解起来优点抽象,我们打个简单的比方吧,中国人都喜欢做菜,做菜的时候后会放很多配料...

木本本
29分钟前
9
0
017、xml版本代码生成器配置

1、在pom.xml文件中增加mybatis-generator-maven-plugin插件 <build> <plugins> <plugin> <groupId>org.mybatis.generator</groupId> <artifactId>......

北岩
41分钟前
7
0
用jQuery-Easy-UI编写注册页面

本文转载于:专业的前端网站➮用jQuery-Easy-UI编写注册页面 1 <!DOCTYPE html> 2 <html lang="en"> 3 4 <head> 5 <meta charset="UTF-8"> 6 <meta name="viewport" content=......

前端老手
49分钟前
6
0
Git ssh配置

生成密钥对 ssh-keygen -t rsa -C "email@email.com"邮箱替换自己邮箱在地址C:\Users\账户\.ssh下,id_rsa、id_rsa.pub两个文件复制文件id_rsa.pub内容到github\gitlab的Settings-> SSH ......

JUKE
57分钟前
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部