日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python迭代器创建序列_Python 中迭代器与生成器实例详解

發布時間:2023/12/10 python 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python迭代器创建序列_Python 中迭代器与生成器实例详解 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

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

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

1.手動遍歷迭代器

應用場景:想遍歷一個可迭代對象中的所有元素,但是不想用for循環

解決方案:使用next()函數,并捕獲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.代理迭代

應用場景:想直接在一個包含有列表、元組或其他可迭代對象的容器對象上執行迭代操作

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

示例:

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):

#將迭代請求傳遞給內部的_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.反向迭代

應用場景:想要反向迭代一個序列

解決方案:使用內置的reversed()函數或者在自定義類上實現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

#常規迭代

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.有選擇的迭代

應用場景:想遍歷一個可迭代對象,但是對它開始的某些元素并不感興趣,想跳過

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

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

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

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

應用場景:想在多個對象執行相同的操作,但是這些對象在不同的容器中

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

7.展開嵌套的序列

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

解決方案:使用包含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)

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

總結

以上是生活随笔為你收集整理的python迭代器创建序列_Python 中迭代器与生成器实例详解的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。