亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Python 中迭代器與生成器實(shí)例詳解

 更新時(shí)間:2017年03月29日 11:00:24   投稿:lqh  
這篇文章主要介紹了Python 中迭代器與生成器實(shí)例詳解的相關(guān)資料,需要的朋友可以參考下

Python 中迭代器與生成器實(shí)例詳解

本文通過(guò)針對(duì)不同應(yīng)用場(chǎng)景及其解決方案的方式,總結(jié)了Python中迭代器與生成器的一些相關(guān)知識(shí),具體如下:

1.手動(dòng)遍歷迭代器

應(yīng)用場(chǎng)景:想遍歷一個(gè)可迭代對(duì)象中的所有元素,但是不想用for循環(huán)

解決方案:使用next()函數(shù),并捕獲StopIteration異常

def manual_iter():
  with open('/etc/passwd') as f:
    try:
      while True:
        line=next(f)
        if line is None:
          break
        print(line,end='')
      except StopIteration:
        pass
#test case
items=[1,2,3]
it=iter(items)
next(it)
next(it)
next(it)

2.代理迭代

應(yīng)用場(chǎng)景:想直接在一個(gè)包含有列表、元組或其他可迭代對(duì)象的容器對(duì)象上執(zhí)行迭代操作

解決方案:定義一個(gè)iter()方法,將迭代操作代理到容器內(nèi)部的對(duì)象上

示例:

class Node:
  def __init__(self,value):
    self._value=value
    self._children=[]
  def __repr__(self):
    return 'Node({!r})'.fromat(self._value)
  def add_child(self,node):
    self._children.append(node)
  def __iter__(self):
    #將迭代請(qǐng)求傳遞給內(nèi)部的_children屬性
    return iter(self._children)
#test case
if __name='__main__':
  root=Node(0)
  child1=Node(1)
  child2=Nide(2)
  root.add_child(child1)
  root.add_child(child2)
  for ch in root:
    print(ch)

3.反向迭代

應(yīng)用場(chǎng)景:想要反向迭代一個(gè)序列

解決方案:使用內(nèi)置的reversed()函數(shù)或者在自定義類上實(shí)現(xiàn)reversed()

示例1

a=[1,2,3,4]
for x in reversed(a):
  print(x) #4 3 2 1


f=open('somefile')
for line in reversed(list(f)):
  print(line,end='')
#test case
for rr in reversed(Countdown(30)):
  print(rr)

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

示例2

class Countdown:
  def __init__(self,start):
    self.start=start
  #常規(guī)迭代
  def __iter__(self):
    n=self.start
    while n > 0:
      yield n
      n -= 1
  #反向迭代
  def __reversed__(self):
    n=1
    while n <= self.start:
      yield n
      n +=1

4.有選擇的迭代

應(yīng)用場(chǎng)景:想遍歷一個(gè)可迭代對(duì)象,但是對(duì)它開始的某些元素并不感興趣,想跳過(guò)

解決方案:使用itertools.dropwhile()

示例1

with open('/etc/passwd') as f:
  for line in f:
    print(line,end='')

示例2

from itertools import dropwhile
with open('/etc/passwd') as f:
  for line in dropwhile(lambda line:line.startwith('#'),f):
    print(line,end='')

5.同時(shí)迭代多個(gè)序列

應(yīng)用場(chǎng)景:想同時(shí)迭代多個(gè)序列每次分別從一個(gè)序列中取一個(gè)元素

解決方案:使用zip()函數(shù)

這里寫圖片描述

這里寫圖片描述

這里寫圖片描述

這里寫圖片描述

6.不同集合上元素的迭代

應(yīng)用場(chǎng)景:想在多個(gè)對(duì)象執(zhí)行相同的操作,但是這些對(duì)象在不同的容器中

解決方案:使用itertool.chain()函數(shù)

這里寫圖片描述

7.展開嵌套的序列

應(yīng)用場(chǎng)景:想將一個(gè)多層嵌套的序列展開成一個(gè)單層列表

解決方案:使用包含yield from語(yǔ)句的遞歸生成器

示例

from collections import Iterable
def flatten(items,ignore_types=(str,bytes)):
  for x in items:
    if isinstance(x,Iterable) and not isinstance(x,ignore_types):
      yield from flatten(x)
    else:
      yield x
#test case
items=[1,2,[3,4,[5,6],7],8]
for x in flatten(items):
  print(x)

感謝閱讀,希望能幫助到大家,謝謝大家對(duì)本站的支持!

相關(guān)文章

  • Python的deque雙端隊(duì)列詳解

    Python的deque雙端隊(duì)列詳解

    這篇文章主要介紹了Python的deque雙端隊(duì)列詳解,deque(雙端隊(duì)列)是一種數(shù)據(jù)結(jié)構(gòu),允許使用O(1)時(shí)間復(fù)雜度從兩端添加和刪除元素, Python的deque類實(shí)現(xiàn)了此數(shù)據(jù)結(jié)構(gòu),需要的朋友可以參考下
    2023-09-09
  • pycharm安裝漢化包失敗的問(wèn)題及解決

    pycharm安裝漢化包失敗的問(wèn)題及解決

    這篇文章主要介紹了pycharm安裝漢化包失敗的問(wèn)題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-11-11
  • 深入理解Python分布式爬蟲原理

    深入理解Python分布式爬蟲原理

    本篇文章主要介紹了深入理解Python分布式爬蟲原理,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-11-11
  • PyTorch實(shí)現(xiàn)ResNet50、ResNet101和ResNet152示例

    PyTorch實(shí)現(xiàn)ResNet50、ResNet101和ResNet152示例

    今天小編就為大家分享一篇PyTorch實(shí)現(xiàn)ResNet50、ResNet101和ResNet152示例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-01-01
  • Python使用Redis實(shí)現(xiàn)作業(yè)調(diào)度系統(tǒng)(超簡(jiǎn)單)

    Python使用Redis實(shí)現(xiàn)作業(yè)調(diào)度系統(tǒng)(超簡(jiǎn)單)

    Redis作為內(nèi)存數(shù)據(jù)庫(kù)的一個(gè)典型代表,已經(jīng)在很多應(yīng)用場(chǎng)景中被使用,這里僅就Redis的pub/sub功能來(lái)說(shuō)說(shuō)怎樣通過(guò)此功能來(lái)實(shí)現(xiàn)一個(gè)簡(jiǎn)單的作業(yè)調(diào)度系統(tǒng)。這里只是想展現(xiàn)一個(gè)簡(jiǎn)單的想法,所以還是有很多需要考慮的東西沒(méi)有包括在這個(gè)例子中,比如錯(cuò)誤處理,持久化等
    2016-03-03
  • 記一次python 內(nèi)存泄漏問(wèn)題及解決過(guò)程

    記一次python 內(nèi)存泄漏問(wèn)題及解決過(guò)程

    最近工作中慢慢開始用python協(xié)程相關(guān)的東西,所以用到了一些相關(guān)模塊,如aiohttp, aiomysql, aioredis等,用的過(guò)程中也碰到的很多問(wèn)題,這里整理了一次內(nèi)存泄漏的問(wèn)題。分享到腳本之家平臺(tái),需要的朋友參考下
    2018-11-11
  • Python英文文章詞頻統(tǒng)計(jì)(14份劍橋真題詞頻統(tǒng)計(jì))

    Python英文文章詞頻統(tǒng)計(jì)(14份劍橋真題詞頻統(tǒng)計(jì))

    這篇文章主要介紹了Python英文文章詞頻統(tǒng)計(jì)(14份劍橋真題詞頻統(tǒng)計(jì)),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-10-10
  • Python易忽視知識(shí)點(diǎn)小結(jié)

    Python易忽視知識(shí)點(diǎn)小結(jié)

    這篇文章主要介紹了Python易忽視知識(shí)點(diǎn),實(shí)例分析了Python中容易被忽視的常見操作技巧,需要的朋友可以參考下
    2015-05-05
  • 31個(gè)必備的Python字符串方法總結(jié)

    31個(gè)必備的Python字符串方法總結(jié)

    字符串是Python中基本的數(shù)據(jù)類型,幾乎在每個(gè)Python程序中都會(huì)使用到它。本文為大家總結(jié)了Python中必備的31個(gè)字符串方法,需要的可以參考一下
    2022-03-03
  • Python辦公自動(dòng)化之Excel介紹

    Python辦公自動(dòng)化之Excel介紹

    大家好,本篇文章主要講的是Python辦公自動(dòng)化之Excel介紹,感興趣的同學(xué)趕快來(lái)看一看吧,對(duì)你有幫助的話記得收藏一下,方便下次瀏覽
    2021-12-12

最新評(píng)論