python中內置的庫中有個itertools,可以滿足我們在編程中絕大多數需要迭代的場合,當然也可以自己造輪子,但是有現成的好用的輪子不妨也學習一下,看哪個用的順手~
首先還是要先import一下:
#import itertoolsfrom itertools import * #最好使用時用上面那個,不過下面的是為了演示比較 常用的,所以就直接全部導入了
一.無限迭代器:
由于這些都是無限迭代器,因此使用的時候都要設置終止條件,不然會一直運行下去,也就不是我們想要的結果了。
1、count()
可以設置兩個參數,第一個參數為起始點,且包含在內,第二個參數為步長,如果不設置第二個參數則默認步長為1
for x in count(10,20): if x < 200: print x
def count(start=0, step=1): # count(10) --> 10 11 12 13 14 ... # count(2.5, 0.5) -> 2.5 3.0 3.5 ... n = start while True: yield n n += step
2、cycle()
可以設置一個參數,且只接受可以迭代的參數,如列表,元組,字符串。。。,該函數會對可迭代的所有元素進行循環:
for i,x in enumerate(cycle('abcd')): if i < 5: print x
def cycle(iterable): # cycle('ABCD') --> A B C D A B C D A B C D ... saved = [] for element in iterable: yield element saved.append(element) while saved: for element in saved: yield element
3、repeat()
可以設置兩個參數,其中第一個參數要求可迭代,第二個參數為重復次數,第二個參數如不設置則無限循環,一般來說使用時都會設置第二個參數,用來滿足預期重復次數后終止:
#注意如果不設置第二個參數notebook運行可能會宕機for x in repeat(['a','b','c'],10): print x
二.有限迭代器
1、chain()
可以接受不定個數個可迭代參數,不要求可迭代參數類型相同,會返回一個列表,這個類似于list的extend,不過不同點是list的extend是對原變量進行改變不返回,而chain則是就地改變并返回:
list(chain(range(4),range(5)))list(chain(range(4),'abc'))list(chain(('a','b','c'),'nihao',['shijie','zhongguo']))
def chain(*iterables): # chain('ABC', 'DEF') --> A B C D E F for it in iterables: for element in it: yield element
2.compress()
第一個參數為可迭代類型,第二個參數為0和1的集合,兩者長度可以不等,
這個暫時不知道可以用在哪里、
list(compress(['a','b','c','d','e'],[0,1,1,1,0,1]))
新聞熱點
疑難解答