python生成迭代的用法
生活随笔
收集整理的這篇文章主要介紹了
python生成迭代的用法
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
說明
python的進階用法之一就是生成器、迭代器的用法,使用生成迭代可以極大地減少代碼的行數(shù),使得代碼簡明易讀。
列表生成式
range(1,100,5) #第一個參數(shù)表示開始位,第二個參數(shù)表示結(jié)束位(不含),第三個參數(shù)表示步長,就是每5個數(shù)返回一次。
生成器
''' 遇到問題沒人解答?小編創(chuàng)建了一個Python學(xué)習(xí)交流QQ群:778463939 尋找有志同道合的小伙伴,互幫互助,群里還有不錯的視頻學(xué)習(xí)教程和PDF電子書! ''' a = (i for i in range(1,10)) #與list的區(qū)別為[]和() next(a),a.__next__() #生成器的取值方式只能使用next的方法。 # fobi def num():a,b = 0,1for i in range(10):yield b # yield和return返回類似,只不過yield后會繼續(xù)執(zhí)行,且函數(shù)返回值為生成器。a,b = b,a+b a = num() for n in a: # 使用for進行迭代print(n)注意:生成器占用內(nèi)存小,在使用的時候取值,降低CPU和內(nèi)存空間,提高效率。
迭代器
迭代器是所有生成器和生成列表的基類。
注意:生成器是可迭代對象,迭代器不一定是生成器。并且迭代器無法回取,只能向前取值。
注意:一個對象具有 iter 方法的才能稱為可迭代對象,使用yield生成的迭代器函數(shù),也有iter方法。凡是沒有iter方法的對象不是可迭代對象,凡是沒有__next__()方法的不是是生成器。(這里的方法都是魔法方法,是內(nèi)置方法,可以使用dir()查看)
itertools系統(tǒng)庫
itertools集成了大部分的迭代函數(shù),可以方便地求前綴和,前綴積等。
accumulate函數(shù)
''' 遇到問題沒人解答?小編創(chuàng)建了一個Python學(xué)習(xí)交流QQ群:778463939 尋找有志同道合的小伙伴,互幫互助,群里還有不錯的視頻學(xué)習(xí)教程和PDF電子書! ''' import operator from itertools import accumulate x = accumulate(range(1, 10), operator.add) # 前綴和, 可以改為operator.mul求前綴積 print(list(x)) x = accumulate(range(1,10), max) print(list(x)) # [1, 3, 6, 10, 15, 21, 28, 36, 45] # [1, 2, 3, 4, 5, 6, 7, 8, 9]排列組合
permutations會生成所有全排列
from itertools import permutationsx = permutations("ACB") print(list(x)) # [('A', 'C', 'B'), ('A', 'B', 'C'), ('C', 'A', 'B'), ('C', 'B', 'A'), ('B', 'A', 'C'), ('B', 'C', 'A')]combinations會生成所有組合
from itertools import combinations x = combinations('ABCD', 2) print(list(x)) # [('A', 'B'), ('A', 'C'), ('A', 'D'), ('B', 'C'), ('B', 'D'), ('C', 'D')]總結(jié)
以上是生活随笔為你收集整理的python生成迭代的用法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python的可变对象和不可变对象
- 下一篇: Python+Selenium基本语法