Python標準ライブラリitertoolsの使い方

4522 ワード

Python標準倉庫itertoolsモジュール紹介
itertoolsはpython内蔵のモジュールで、シンプルで機能的なものを使って、ここでまとめて整理してみて、簡単な応用例を提供します。もしまだあなたの要求を満たしていないならば、補充に参加することを歓迎します。
Python標準ライブラリitertoolsを使うなら、簡単な一言で導入します。import itertools
chain()
名前の意味と同じようにリストを一つください。リストはリストとリンクされています。iterablesオブジェクトを返します。

letters = ['a', 'b', 'c', 'd', 'e', 'f']
booleans = [1, 0, 1, 0, 0, 1]
print(list(itertools.chain(letters,booleans)))
#  :['a', 'b', 'c', 'd', 'e', 'f', 1, 0, 1, 0, 0, 1]
print(tuple(itertools.chain(letters,letters[3:])))
#  ('a', 'b', 'c', 'd', 'e', 'f', 'd', 'e', 'f')
print(set(itertools.chain(letters,letters[3:])))
#  :{'a', 'd', 'b', 'e', 'c', 'f'}
print(list(itertools.chain(letters,letters[3:])))
#  :['a', 'b', 'c', 'd', 'e', 'f', 'd', 'e', '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はfalseのデータをフィルタリングします。条件が空の場合は、dataのfalseのエントリを返します。

booleans = [1, 0, 1, 0, 0, 1]
numbers = [23, 20, 44, 32, 7, 12]
print(list(itertools.filterfalse(None,booleans)))
#  :[0, 0, 0]
print(list(itertools.filterfalse(lambda x : x < 20,numbers)))
#  :[23, 20, 44, 32] 
comppress()
使用する要素を返します。bセットの元素の真の値に基づいて、aセットの対応する要素を返します。

print(list(itertools.compress(letters,booleans)))
# ['a', 'c', 'f']
starmap()
リストの各項目に対して関数機能を呼び出します。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,4,1]) --> 6 4 1
タワール()
Taewehile(predicate、iterable);シーケンスを返します。predicateがtrueであるときは締め切りです。

takewhile(lambda x: x<5, [1,4,6,4,1]) --> 1 4
islice()
islice(seq[,start],stop[,step])シーケンスseqを返します。startからstopまでのステップサイズがStepの要素です。

for i in islice("abcdef", 0, 4, 2):#a, c
  print i
プロジェクト
product(iter 1,iter 2,…iterN,[repeat=1]);一つのローズマリーを作成して、item 1、item 2などの項目を表すデカルト積のタプルを生成します。レピートは一つのキーワードパラメータで、重複生成シーケンスの回数を指定します。

  # 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, 5], [6, 7]):
  print i
(1, 4, 6)
(1, 4, 7)
(1, 5, 6)
(1, 5, 7)
(2, 4, 6)
(2, 4, 7)
(2, 5, 6)
(2, 5, 7)
(3, 4, 6)
(3, 4, 7)
(3, 5, 6)
(3, 5, 7)
permuttions()
permuttions(p[,r])pのr個の要素を任意に取って配列する元のグループのディケンサを返します。

for i in permutations([1, 2, 3], 3):
  print i
(1, 2, 3)
(1, 3, 2)
(2, 1, 3)
(2, 3, 1)
(3, 1, 2)
(3, 2, 1)
commbinations.
commbinations;サブジェネレータを作成して、iterableのすべての長さがrのサブシーケンスを返します。返したサブシーケンスの項目は入力iterableの順に並べ替えられます。
ノート:重複なし

for i in combinations([1, 2, 3], 2):
  print i
(1, 2)
(1, 3)
(2, 3)
cobinationswith_replaccement()
同上、重複例を持つ:

for i in combinations_with_replacement([1, 2, 3], 2):
  print i
(1, 1)
(1, 2)
(1, 3)
(2, 2)
(2, 3)
(3, 3)
適用例
素数のシーケンスの中で1,3,5,7,9,11,13,15の3つの数の合計を求めます。35の3つの数です。

def get_three_data(data_list,amount):
  for data in list(itertools.combinations(data_list, 3)):
    if sum(data) == amount:
      print(data)
#(7, 13, 15)
もっと多くのpython標準ライブラリの使い方は以下の関連記事をクリックしてください。