1. 程式人生 > 程式設計 >詳解python itertools功能

詳解python itertools功能

介紹

itertools是python內建的模組,使用簡單且功能強大,這裡嘗試彙總整理下,並提供簡單應用示例;如果還不能滿足你的要求,歡迎加入補充。

使用只需簡單一句匯入:import itertools

chain()

與其名稱意義一樣,給它一個列表如 lists/tuples/iterables,連結在一起;返回iterables物件。

letters = ['a','b','c','d','e','f']
booleans = [1,1,1]
   print(list(itertools.chain(letters,booleans)))
#   ['a','f',1]
 
  print(tuple(itertools.chain(letters,letters[3:])))
#   ('a','f')
 
  print(set(itertools.chain(letters,letters[3:])))
#   {'a','f'}
    
  print(list(itertools.chain(letters,letters[3:])))
#   ['a','f']
 
  for item in list(itertools.chain(letters,booleans)):
    print(item)

count()

生成無界限序列,count(start=0,step=1) ,示例從100開始,步長為2,迴圈10,列印對應值;必須手動break,count()會一直迴圈。

  i = 0
  for item in itertools.count(100,2):
    i += 1
    if i > 10 : break
    
    print(item) 
 
filterfalse ()
   Python filterfalse(contintion,data) 迭代過濾條件為false的資料。如果條件為空,返回data中為false的項;
booleans = [1,1]
numbers = [23,20,44,32,7,12]
 
print(list(itertools.filterfalse(None,booleans)))
#   [0,0]
print(list(itertools.filterfalse(lambda x : x < 20,numbers)))
#  [23,32]

compress()

返回我們需要使用的元素,根據b集合中元素真值,返回a集中對應的元素。

print(list(itertools.compress(letters,booleans)))
# ['a','f']

starmap()

針對list中的每一項,呼叫函式功能。starmap(func,list[]);

starmap(pow,[(2,5),(3,2),(10,3)]) --> 32 9 1000
 
>>> from itertools import *
>>> x = starmap(max,[[5,14,5],[2,34,6],[3,5,2]])
>>> for i in x:
>>> print (i)
14
34
5
repeat()
repeat(object[,times]) 重複times次;
repeat(10,3) --> 10 10 10
dropwhile()
dropwhile(func,seq );當函式f執行返回假時,開始迭代序列
dropwhile(lambda x: x<5,[1,4,6,1]) --> 6 4 1
takewhile()
takewhile(predicate,iterable);返回序列,當predicate為true是截止。
takewhile(lambda x: x<5,1]) --> 1 4
islice()
islice(seq[,start],stop[,step]);返回序列seq的從start開始到stop結束的步長為step的元素的迭代器
for i in islice("abcdef",2):#a,c
  print i

product()

product(iter1,iter2,... iterN,[repeat=1]);建立一個迭代器,生成表示item1,item2等中的專案的笛卡爾積的元組,repeat是一個關鍵字引數,指定重複生成序列的次數

# product('ABCD','xy') --> Ax Ay Bx By Cx Cy Dx Dy
  # product(range(2),repeat=3) --> 000 001 010 011 100 101 110 111
for i in product([1,2,3],[4,[6,7]):
  print i
(1,6)
(1,7)
(1,7)
(2,6)
(2,7)
(3,6)
(3,7)

permutations()

permutations(p[,r]);返回p中任意取r個元素做排列的元組的迭代器

for i in permutations([1,3):
  print i
(1,3)
(1,3,2)
(2,3)
(2,1)
(3,2)
(3,1)


combinations()

combinations(iterable,r);建立一個迭代器,返回iterable中所有長度為r的子序列,返回的子序列中的項按輸入iterable中的順序排序

note:不帶重複

for i in combinations([1,2):
  print i
(1,2)
(1,3)
combinations_with_replacement()

同上,帶重複 例子:

for i in combinations_with_replacement([1,1)
(1,3)
(3,3)

應用示例

求質數序列中1,9,11,13,15三個數之和為35的三個數;

def get_three_data(data_list,amount):
  for data in list(itertools.combinations(data_list,3)):
    if sum(data) == amount:
      print(data)
#(7,15)
#(9,15)

總結

以上所述是小編給大家介紹的python itertools功能,希望對大家有所幫助!