ホームページ  >  記事  >  バックエンド開発  >  Pythonのforループを詳しく解説

Pythonのforループを詳しく解説

WBOY
WBOYオリジナル
2016-06-16 08:45:371633ブラウズ

他のほとんどの言語と同様、Python にも for ループがあります。これまでこれらを見なかった唯一の理由は、Python は他の多くの機能に優れているため、通常はそれらを必要としないからです。

他のほとんどの言語には Python ほど強力なリスト データ型がないため、開始、終了、ステップ サイズを指定して整数や文字の範囲を定義するなど、多くの作業を自分で行う必要があります。他の反復​​可能なエンティティ。しかし、Python では、for ループはリスト解析と同じように単純にリストをループします。

1. for ループの紹介

コードをコピー コードは次のとおりです。

>>> li = ['a', 'b ', ' e']
>>> li の s: (1)
... print s (2)
a

e
> >> ; print "n".join(li) (3)
a

e

(1) for ループの構文はリスト解析と似ています。 li はリストであり、s は最初の要素から順に各要素の値を受け取ります。
(2) if ステートメントやその他のインデントされたブロックと同様に、for ループには任意の数のコード行を含めることができます。
(3) これが、これまで for ループを見なかった理由です。私たちはまだ for ループを必要としていませんでした。他の言語では、結合またはリストの解析だけが必要な場合に、for ループを使用する必要がある頻度が驚くほど高くなります。

「通常の」 (Visual Basic 標準) カウント for ループを作成するのも非常に簡単です。

2. 簡単なカウント

コードをコピー コードは次のとおりです:

> for i in range(5): ( 1)
... print i
0
1
2
3
4
>>> li = ['a', 'b', 'c' , 'd', 'e']
>>> for i in range(len(li)): (2)
- 104 -Dive Into Python http://diveintopython. org/
... print li[i]
a

c
d
e

(1) range は整数のリストを生成し、それを通じてループが制御されます。少し奇妙に見えることは承知していますが、ループをカウントするのに時々 (つまり、時々) 便利です。
(2) 私たちはこのように使ったことはありません。これが Visual Basic の考え方です。それを取り除きましょう。リストをトラバースする正しい方法は、前の例に示したとおりです。

for ループは単純にカウントするためだけのものではありません。あらゆる種類のものを反復処理できます。次の例は、for ループを使用して辞書を走査する例です。

3. 辞書をトラバースします

コードをコピーします。 コードは次のとおりです。

>>>
>>> for k, v in os.environ.items(): (1) (2)
... print "%s=%s" % (k, v)
USERPROFILE= C:Documents and Settingsmpilgrim
OS=Windows_NT
COMPUTERNAME=MPILGRIM
USERNAME=mpilgrim
[...省略...]
>>> ".join (["%s=%s" % (k, v)
... for k, v in os.environ.items()]) (3)
USERPROFILE=C:Documents および設定mpilgrim
OS=Windows_NT
COMPUTERNAME=MPILGRIM
USERNAME=mpilgrim
[...省略...]

(1) os.environ は、システム上で定義された環境変数の辞書です。 Windows では、これらの変数は MS-DOS からアクセスできるユーザー変数およびシステム変数です。 UNIX では、これらはシェル起動スクリプトでエクスポートされる変数です。 Mac OS には環境変数の概念がないため、この辞書は空です。
(2) os.environ.items() はタプルのリストを返します: [(key1, value1), (key2, value2), ...]。 for ループはこのリストを走査します。最初のラウンドでは、key1 を k に割り当て、value1 を v に割り当てます。つまり、k = USERPROFILE、v = C:Documents および Settingsmpilgrim となります。 2 番目のラウンドでは、k は 2 番目のキーワード OS を取得し、v は対応する値 Windows_NT を取得します。
(3) 複数変数の代入とリスト解析を使用すると、for ループ全体を 1 行のステートメントに置き換えることができます。実際のコーディングでこれを行うかどうかは個人的なスタイルの問題ですが、辞書をリストにマッピングしてからリストを文字列にマージするのが明確であるため、私はこの方法が好きです。他のプログラマは、それを for ループとして作成することを好むでしょう。どちらの場合も出力は同じですが、このバージョンの print ステートメントは多数ではなく 1 つだけであるため、若干高速であることに注意してください。

それでは、第 5 章で紹介したサンプルプログラム fileinfo.py の MP3FileInfo の for ループを見てみましょう。

コードをコピー コードは次のとおりです:

tagDataMap = {"タイトル" : ( 3, 33, ストリップヌル),
"アーティスト" : ( 33, 63, ストリップヌル),
"アルバム" : ( 63 , 93, ストリップヌル) 、
"年" : ( 93, 97、stripnulls)、
"コメント" : ( 97、126、stripnulls)、
"ジャンル" : ( 127、128、ord)} (1)
.
.
.
if tagdata[:3] == "TAG":
タグの場合、(start、end、parseFunc) in self.tagDataMap.items(): (2 )
self[tag] = parseFunc(tagdata[start:end]) (3)

(1) tagDataMap は、MP3 ファイル内で検索するタグを定義するクラス属性です。タグは固定長フィールドとして保存され、ファイルの最後の 128 バイトを読み取る限り、バイト 3 ~ 32 は常に曲名、バイト 33 ~ 62 は常に歌手の名前、バイト 63 ~ 92はアルバム名などです。 tagDataMap はタプルの辞書であり、各タプルには 2 つの整数と関数参照が含まれることに注意してください。
(2) これは複雑に見えるかもしれませんが、そうではありません。ここでの for 変数の構造は、項目によって返されるリストの要素の構造と一致します。 items は (キー、値) 形式のタプルのリストを返すことに注意してください。リストの最初の要素は ("title", (3, 33, )) であるため、ループの最初のラウンドでは、タグは "title"、開始は 3、終了は 33、および parseFunc です。関数はstripnullsです。
(3) 単一の MP3 タグからすべてのパラメータを抽出したので、タグ データの保存は簡単です。タグデータを最初から最後までスライスしてタグの実際のデータを取得し、parseFunc を呼び出してデータに対して後続の処理を実行し、
parseFunc の戻り値を値として疑似辞書 self のキータグに割り当てます。 。 tagDataMap 内のすべての要素を反復処理すると、self にはすべてのタグの値が含まれ、それがどのようなものであるかがわかります。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。