在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 教程/ Python/ 五、迭代器和生成器綜合例子
二、Enum 的源碼
前言
一、Python 模塊簡(jiǎn)介
一、List(列表)
五、匿名函數(shù)
三、什么是元類
二、循環(huán)語句
二、模塊的使用
三、第一個(gè) Python 程序
線程與進(jìn)程
Python
三、條件語句和循環(huán)語句綜合實(shí)例
四、對(duì)象的描述器
三、類的屬性
一、迭代
五、迭代器和生成器綜合例子
六、運(yùn)算符相關(guān)的魔術(shù)方法
一、枚舉類的使用
前言
一、簡(jiǎn)明概述
二、Python 的基本數(shù)據(jù)類型
多線程編程
五、作用域
四、包
四、枚舉的比較
四、Python 中的變量
六、類的多態(tài)
一、Python 中類也是對(duì)象
一、Python 的 Magic Method
前言
四、生成器
一、面向?qū)ο蟮母拍?/span>
五、類的繼承
二、類
二、使用 <code>type()</code> 動(dòng)態(tài)創(chuàng)建類
進(jìn)程
二、set
三、主模塊和非主模塊
一、字典(Dictionary)
前言
前言
前言
前言
四、集成開發(fā)環(huán)境(IDE): PyCharm
前言
四、函數(shù)的參數(shù)
三、lsit 生成式(列表生成式)
四、自定義元類
四、類的方法
二、函數(shù)傳值問題
二、注釋
一、條件語句
一、Python 語法的簡(jiǎn)要說明
三、函數(shù)返回值
三、基本數(shù)據(jù)類型轉(zhuǎn)換
三、屬性的訪問控制
二、Python 的安裝
前言
三、命名規(guī)范
一、Python 自定義函數(shù)的基本步驟
三、自定義類型的枚舉
五、自定義容器(Container)
二、Python 迭代器
前言
二、tuple(元組)
一、Python 簡(jiǎn)介
前言
前言
前言
二、構(gòu)造(<code>__new__</code>)和初始化(<code>__init__</code>)
前言

五、迭代器和生成器綜合例子

因?yàn)榈骱蜕善骰臼腔ネǖ?,因此有些知識(shí)點(diǎn)需要綜合在一起

1、反向迭代

反向迭代,應(yīng)該也是常有的需求了,比如從一開始迭代的例子里,有個(gè)輸出 list 的元素,從 1 到 5 的

list1 = [1,2,3,4,5]
for num1 in list1 :
    print ( num1 , end = ' ' )

那么我們從 5 到 1 呢?這也很簡(jiǎn)單, Python 中有內(nèi)置的函數(shù) reversed()

list1 = [1,2,3,4,5]
for num1 in reversed(list1) :
    print ( num1 , end = ' ' )

方向迭代很簡(jiǎn)單,可是要注意一點(diǎn)就是:反向迭代僅僅當(dāng)對(duì)象的大小可預(yù)先確定或者對(duì)象實(shí)現(xiàn)了 __reversed__() 的特殊方法時(shí)才能生效。 如果兩者都不符合,那你必須先將對(duì)象轉(zhuǎn)換為一個(gè)列表才行

其實(shí)很多時(shí)候我們可以通過在自定義類上實(shí)現(xiàn) __reversed__() 方法來實(shí)現(xiàn)反向迭代。不過有些知識(shí)點(diǎn)在之前的篇節(jié)中還沒有提到,不過可以相應(yīng)的看下,有編程基礎(chǔ)的,學(xué)完上面的知識(shí)點(diǎn)應(yīng)該也能理解的。

# -*- coding: UTF-8 -*-

class Countdown:
    def __init__(self, start):
        self.start = start

    def __iter__(self):
        # Forward iterator
        n = self.start
        while n > 0:
            yield n
            n -= 1

    def __reversed__(self):
        # Reverse iterator
        n = 1
        while n <= self.start:
            yield n
            n += 1

for rr in reversed(Countdown(30)):
    print(rr)
for rr in Countdown(30):
    print(rr)

輸出的結(jié)果是 1 到 30 然后 30 到 1 ,分別是順序打印和倒序打印

2、同時(shí)迭代多個(gè)序列

你想同時(shí)迭代多個(gè)序列,每次分別從一個(gè)序列中取一個(gè)元素。你遇到過這樣的需求嗎?

為了同時(shí)迭代多個(gè)序列,使用 zip() 函數(shù),具體示例:

# -*- coding: UTF-8 -*-

names = ['laingdianshui', 'twowater', '兩點(diǎn)水']
ages = [18, 19, 20]
for name, age in zip(names, ages):
     print(name,age)

輸出的結(jié)果:

laingdianshui 18
twowater 19
兩點(diǎn)水 20

其實(shí) zip(a, b) 會(huì)生成一個(gè)可返回元組 (x, y) 的迭代器,其中 x 來自 a,y 來自 b。 一旦其中某個(gè)序列到底結(jié)尾,迭代宣告結(jié)束。 因此迭代長(zhǎng)度跟參數(shù)中最短序列長(zhǎng)度一致。注意理解這句話喔,也就是說如果 a , b 的長(zhǎng)度不一致的話,以最短的為標(biāo)準(zhǔn),遍歷完后就結(jié)束。

利用 zip() 函數(shù),我們還可把一個(gè) key 列表和一個(gè) value 列表生成一個(gè) dict (字典),如下:

# -*- coding: UTF-8 -*-

names = ['laingdianshui', 'twowater', '兩點(diǎn)水']
ages = [18, 19, 20]

dict1= dict(zip(names,ages))

print(dict1)

輸出如下結(jié)果:

{'laingdianshui': 18, 'twowater': 19, '兩點(diǎn)水': 20}

這里提一下, zip() 是可以接受多于兩個(gè)的序列的參數(shù),不僅僅是兩個(gè)。