Python推导模式和迭代器

 


一、推导式是Python中很强大的、很受欢迎的特性,具有语言简洁,速度快等优点,并且多以[]为推导标志。推导式包括:

  1.列表推导式

  2.字典推导式

  3.集合推导式

  嵌套列表推导式

【列表推导式】

  列表推导能非常简洁的构造一个新列表:只用一条简洁的表达式即可对得到的元素进行转换变形

例如代码如下:

  names = ['Bob','Tom','alice','Jerry','Wendy','Smith']

  print( [name.upper() for name in names if len(name)>3])

 输出: ['ALICE', 'JERRY', 'WENDY', 'SMITH']

【字典推导式】

  字典和集合推导式是该思想的延续,语法差不多,只不过产生的是集合和字典而已。

代码如下:

mcase = {'a':10,'b':44}
mcase_input = {k:v for k,v in mcase.items()}
print(mcase_input)

【集合推导式】

  集合推导式跟列表推导式非常相似,唯一区别在于用{}代替[]

代码如下:

#set集合
squared = {x** 2 for x in[ 1, 1, 2]}
print(squared)

#列表
squared = [x** 2 for x in[ 1, 1, 2]]
print(squared)

【嵌套列表推导式】

  嵌套列表是指列表中嵌套列

 
  
m = [[1,2,3],[4,5,6],[7,8,9]]
n = [[2,2,2],[3,3,3],[4,4,4]]

list = [[m[i][0]*n[i][0],m[i][1]*n[i][1],m[i][2]*n[i][2]] for i in range(len(m))]
print(list)

l1 = [[ m[row][col]*n[row][col]for col in range(3)] for row in range(3)]
print(l1)

二、迭代器

迭代器仅是一容器对象,它实现了迭代器协议。它有两个基本方法:
1)__next__()方法
返回容器的下一个元素
2)__iter__()方法
返回迭代器自身

注意:迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束。迭代器只能往前不会后退

三、生成器

第一种方式:将列表的[]改为(),里面可以写推导
生成器只要调用next()方法即可得到下一个值,到最后一个后异常(StopIteration)退出
用表达式做生成器
例:
class IteratorDemo:
    def __init__(self,start=0,end=0):
        self.start=start
        self.end=end
    def __iter__(self):
        return self#返回自己对象本身
    def __next__(self):
        #得到当前的指针start,让start位移
        if self.start<self.end:
            i=self.start#当前的下标
            self.start+=1#获取下一次的下标
            return i
        else:
            raise StopIteration()
第二种方式:
通过裴波那切序列:将print换成yield,每次生成一个值
但是调用方法时没有结果
在方法内使用yield做生成器,这样调用此方法时,会得出一个结果
然后也是可以调用next()
每到yield时,就会停止,返回当前这个值,可以一次一次next()调用
生成器可以被循环迭代,直到循环结束
def feibonaqie():
    a=b=1
    print(a)
    print(b)
    for i in range(7):
        yield (a+b)
        a,b=b,a+b
f=feibonaqie()
for i in f:
    print(i)
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值