欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python 中迭代器與生成器實例詳解

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

Python 中迭代器與生成器實例詳解

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

1.手動遍歷迭代器

應(yīng)用場景:想遍歷一個可迭代對象中的所有元素,但是不想用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)用場景:想直接在一個包含有列表、元組或其他可迭代對象的容器對象上執(zhí)行迭代操作

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

示例:

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):
    #將迭代請求傳遞給內(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)用場景:想要反向迭代一個序列

解決方案:使用內(nèi)置的reversed()函數(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)用場景:想遍歷一個可迭代對象,但是對它開始的某些元素并不感興趣,想跳過

解決方案:使用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.同時迭代多個序列

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

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

這里寫圖片描述

這里寫圖片描述

這里寫圖片描述

這里寫圖片描述

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

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

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

這里寫圖片描述

7.展開嵌套的序列

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

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

示例

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)

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

相關(guān)文章

  • Python的deque雙端隊列詳解

    Python的deque雙端隊列詳解

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

    pycharm安裝漢化包失敗的問題及解決

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

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

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

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

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

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

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

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

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

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

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

    Python易忽視知識點小結(jié)

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

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

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

    Python辦公自動化之Excel介紹

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

最新評論