同等のPython foreach


191

私はPythonに飛び込んでいますが、foreachの反復について質問があります。私はPythonが初めてで、C#の経験があります。だから私は私のコレクションのすべてのアイテム全体の反復のためのPythonに同等の関数があるかどうか疑問に思っています、例えば

pets = ['cat', 'dog', 'fish']
marks = [ 5, 4, 3, 2, 1]

またはこのようなもの。


回答:




12

これを観察することも興味深い

シーケンスのインデックスを反復処理するには、組み合わせることができますrange()し、len()次の通り:

a = ['Mary', 'had', 'a', 'little', 'lamb']
for i in range(len(a)):
  print(i, a[i])

出力

0 Mary
1 had
2 a
3 little
4 lamb

編集#1:別の方法:

シーケンスをループするときに、enumerate()関数を使用して、位置インデックスと対応する値を同時に取得できます。

for i, v in enumerate(['tic', 'tac', 'toe']):
  print(i, v)

出力

0 tic
1 tac
2 toe

4

更新された回答についてはforEach、Pythonで関数を簡単に構築できます。

def forEach(list, function):
    for i, v in enumerate(list):
        function(v, i, list)

あなたもこれを適応させることができmapreducefilter、他の言語またはprecedenceから、他の配列関数を使用すると、オーバー持参したいと思います。forループは十分高速ですが、ボイラープレートはforEach他の機能よりも長くなります。また、listを拡張して、クラスへのローカルポインターを使用してこれらの関数を作成し、リストで直接呼び出すこともできます。


1
使用方法を教えてください。
ScottyBlades

3

上記の答えは有効ですが、dict {key:value}を反復している場合、これが私が使用するアプローチです。

for key, value in Dictionary.items():
    print(key, value)

したがって、辞書のすべてのキーと値を文字列化するようなことをしたい場合は、次のようにします。

stringified_dictionary = {}
for key, value in Dictionary.items():
    stringified_dictionary.update({str(key): str(value)})
return stringified_dictionary

これにより、このタイプの反復を適用するときの突然変異の問題が回避されます。これは、私の経験で(時々)不安定な動作を引き起こす可能性があります。


これより読みやすい代替は反復処理することであるcopyように-あなたは辞書を操作することができるように(あなたのコピーが前に何らかの変更にすべてのキーと値のものであろうが)反復中に、辞書のfor key, value in Dictionary.copy().items()
マルク・Maxmeister

1

dictの場合、forループを使用してindexkeyおよびvalue

dictionary = {'a': 0, 'z': 25}
for index, (key, value) in enumerate(dictionary.items()):
     ## Code here ##
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.