Python入門反復

5213 ワード

Pythonでは、リストまたはtupleが与えられたら、forループを通じてこのlistまたはtupleを巡回することができます。このような遍歴は反復となります。
Pythonでは、反復は通過されます。 for…in 完成します
Pythonのforサイクルの抽象度はJavaのforサイクルより高いです。
Pythonのforサイクルは、listまたはtupleだけでなく、他の任意の反復可能なオブジェクトにも作用することができるからである。
 
したがって、反復動作は、集合に対して秩序化されているか無秩序かにかかわらず、常にforループを用いて、集合の各要素を順次取り出すことができる。
  :                ,         :
1.     :list,tuple,str unicode;
2.     :set
3.          key-value  :dict
反復は動詞で、Pythonではfor循環です。
反復は、スケーリングされた訪問配列と最大の違いは、後者は具体的な反復実施形態であり、前者は反復結果のみに関心があり、反復内部がどのように実現されるかにはまったく関心がないことである。
 
インデックス反復:
Pythonでは、反復は常に要素自体を取り出し、要素の索引ではない。
秩序ある集合に対して,要素は確かに索引がある。
enumerate()関数:インデックスが取得できます。
>>> L = ['Adam', 'Lisa', 'Bart', 'Paul']
>>> for index, name in enumerate(L):
...     print index, '-', name
... 
0 - Adam
1 - Lisa
2 - Bart
3 - Paul
 
enumerate()関数を使って,forサイクルでインデックスindexと要素nameを同時に結びつけることができます。しかし、これはenumerateの特殊文法ではありません。実際には、enumerate()関数は以下の通りです。
['Adam', 'Lisa', 'Bart', 'Paul']
類似になりました
[(0, 'Adam'), (1, 'Lisa'), (2, 'Bart'), (3, 'Paul')]
したがって、反復の各要素は実際にはtupleである。
for t in enumerate(L):
    index = t[0]
    name = t[1]
    print index, '-', name
もし私たちが各tuple要素に二つの要素が含まれていると知っているなら、forサイクルはさらに簡単に書くことができます。
for index, name in enumerate(L):
    print index, '-', name
このようにコードがより簡単であるだけでなく、二つの割当語句も少なくなりました。
インデックス反復は、実際にインデックスによってアクセスされるのではなく、それぞれの要素を自動的に関数によって(index,element)というtupleに変え、繰り返して、インデックスと要素自体を同時に獲得することができます。
 
zip()関数は二つのlistを一つのlistに変えられます。
>>> zip([10, 20, 30], ['A', 'B', 'C'])
[(10, 'A'), (20, 'B'), (30, 'C')]
 
繰り返しdictのvalue:
対象は一つあります values()方法は、dictをすべてのvalueを含むlistに変換します。このように反復するのはdictの各valueです。
d = { 'Adam': 95, 'Lisa': 85, 'Bart': 59 }
print d.values()
# [85, 95, 59]
for v in d.values():    print v
# 85
# 95
# 59
Pythonの文書をよく読めば、dictはvalues()のほかにもう一つの方法があります。 itervalues() メソッド itervalues() 代替方法 values() 方法、反復効果はまったく同じです。
 
d = { 'Adam': 95, 'Lisa': 85, 'Bart': 59 }
print d.itervalues()
# <dictionary-valueiterator object at 0x106adbb50>
for v in d.itervalues():
    print v
# 85
# 95
# 59
 
この二つの方法には何の違いがありますか?
1. values() 方法は実際に一つのdictをvalueを含むlistに変換します。
2.でも itervalues() 方法は変換されません。反復中に順次dictからvalueを取り出すので、itervalues()の方法はvalues()の方法よりもlistを生成するために必要なメモリを節約します。
3. 印刷itervalues()は、Pythonにおいて、forサイクルが機能する反復オブジェクトは、listだけではなく、tuple、str、unicode、dictなど、どのような反復オブジェクトもforループに作用することができ、内部がどのように交替するかについては、通常は関心を持っていません。
オブジェクトが自分で反復できるというなら、直接forループで反復します。反復は抽象的なデータ操作です。反復オブジェクト内部のデータには要求がありません。
 
反復dictのkeyとvalue:
まず、私達はdictの対象のを見ます。 items() メソッドの戻り値:
>>> d = { 'Adam': 95, 'Lisa': 85, 'Bart': 59 }
>>> print d.items()
[('Lisa', 85), ('Adam', 95), ('Bart', 59)]
items()方法は、dictオブジェクトをtupleを含むlistに変換し、このlistを反復してkeyとvalueを同時に得ることができます。
>>> for key, value in d.items():
...     print key, ':', value
... 
Lisa : 85
Adam : 95
Bart : 59
values()と似ています。 items() 対応するものが一つあります。 iteritems()は、dictをlistに変換するのではなく、繰り返しの間にtupleを与え続けるので、iteritems()は余分なメモリを占有しない。