Pythonの高度な特性の反復
1776 ワード
listまたはtupleが与えられた場合、forループによってこのlistまたはtupleを便利にすることができます.このループは反復(iteration)になります.Pythonでは、反復はfor...inによって行われますが、多くの言語、例えばc言語、反復listはJavaコードなどの下付きで行われます.
Pythonのforループは抽象的にcのforループよりも高いことがわかる.Pythonのforループはlistやtupleだけでなく、他の反復可能なオブジェクトにも作用するからだ.Listというデータ型には下付き文字がありますが、他の多くのデータ型には下付き文字がありませんが、反復可能なオブジェクトであれば、下付き文字の有無にかかわらず反復できます.例えばdictは反復できます.
dictの格納はlist方式で順番に並べられていないため,反復した結果の順序が異なる可能性が高い.デフォルトではdict反復はkeyです.valueを反復する場合は
したがって、forループを使用すると、反復可能なオブジェクトに作用する限り、forループは正常に動作しますが、リストか他のデータ型かはあまり関係ありません.では、1つのオブジェクトをどのように判断するときに反復可能なオブジェクトを判断しますか?方法は、collectionsモジュールのIterableタイプで判断します.
最後の小さな質問ですが、list実装タイプJavaのような下付きループをするにはどうすればいいですか?Pythonに内蔵されたenumerate関数はリストをインデックス-要素ペアにすることができ、forサイクルでインデックスと要素自体を同時に反復することができます.
上のforループでは、次のコードのような2つの変数が同時に参照されています.Pythonではよく見られます.
for (i = 0; i < list.length; i++) {
n = list[i];
}
Pythonのforループは抽象的にcのforループよりも高いことがわかる.Pythonのforループはlistやtupleだけでなく、他の反復可能なオブジェクトにも作用するからだ.Listというデータ型には下付き文字がありますが、他の多くのデータ型には下付き文字がありませんが、反復可能なオブジェクトであれば、下付き文字の有無にかかわらず反復できます.例えばdictは反復できます.
>>> d = {'a': 1, 'b': 2, 'c': 3}
>>> for key in d :
... print(key)
...
a
b
c
dictの格納はlist方式で順番に並べられていないため,反復した結果の順序が異なる可能性が高い.デフォルトではdict反復はkeyです.valueを反復する場合は
for value in d.values()
、同僚がkeyとvalueを反復する場合はfor k, v in d.items()
を使用します.文字列も反復可能なオブジェクトであるため、forループにも使用できます.>>> for ch in 'ABC':
... print(ch)
...
A
B
C
したがって、forループを使用すると、反復可能なオブジェクトに作用する限り、forループは正常に動作しますが、リストか他のデータ型かはあまり関係ありません.では、1つのオブジェクトをどのように判断するときに反復可能なオブジェクトを判断しますか?方法は、collectionsモジュールのIterableタイプで判断します.
>>> from collections import Iterable
>>> isinstance('abc', Iterable) # str
True
>>> isinstance([1,2,3], Iterable) # list
True
>>> isinstance(123, Iterable) #
False
最後の小さな質問ですが、list実装タイプJavaのような下付きループをするにはどうすればいいですか?Pythonに内蔵されたenumerate関数はリストをインデックス-要素ペアにすることができ、forサイクルでインデックスと要素自体を同時に反復することができます.
>>> for i, value in enumerate(['A', 'B', 'C']):
... print(i, value)
...
0 A
1 B
2 C
上のforループでは、次のコードのような2つの変数が同時に参照されています.Pythonではよく見られます.
>>> for x, y in [(1, 1), (2, 4), (3, 9)]:
... print(x, y)
...
1 1
2 4
3 9