2

私がPythonを学ぶために使用しているリソースでは、独自のWebサイト内でモジュールを実行できます。もともとはこの特定の大学の学生向けに設計されたものだと思うので、そうではありませんが、これに宿題を付けました。

とりあえず:

彼らは私にこのタスクを実行させました:

リストLの要素の積を返す関数prod(L)を定義します。

私はこのコードを使用してこの関数を動作させました:

def prod(L):
   i = 0
   answer = 1
   x = len(L)
   while i < x:
    answer = answer * L[i]
    i = i + 1
    if i == x:
         return answer

次のモジュールでは、For-Inループについて簡単に説明します。そして彼らは質問を投げかけます:

以前と同じように関数prod(L)を定義しますが、今回は新しい種類のループを使用します。

私はこれをどのように正確に使用するかを理解するために他のリソースを調べようとしましたが、私は何もフォローしていません。誰かが、できれば平易な英語で、for-inループがどのように機能するかを説明できますか?

参考までに:for-inループに関して彼らが話したことはすべてここにあります

リストをループするリスト内のすべての値をループすることは(前の演習のように)非常に一般的です。Pythonでは、ショートカットでこのタイプの操作を実行できます。これは通常、「forall」ループまたは「foreach」ループと呼ばれます。具体的には、Lがリストの場合、このコードは

for x in L: «loop body block»

次のことを行います。最初のxがLの最初の値に設定され、本体が実行されます。次に、xがLの2番目の値に設定され、本体が実行されます。これは、Lのすべてのアイテムに対して継続されます。

私はこれに頭を完全に巻き付けることができません。私は知識の成長のためにこれを行っているので答えを探していません-しかし私はこれに遅れをとっているような気がします):

4

5 に答える 5

6

この簡単な例が明確にするのに役立つことを願っています。次の2つのコードは同じことを行います。

whileループの使用:

L = ['a', 'b', 'c']
i = 0
while i < len(L):
    print L[i]
    i += 1

forループの使用:

L = ['a', 'b', 'c']
for c in L:
    print c

ループで持っているようなインデックスと要素が必要な場合、whileそれを行うためのpythonicな方法はenumerateを使用することです。

L = ['a', 'b', 'c']
for index, element in enumerate(L): # returns (0,'a'),(1,'b'),(2,'c')
    print index
    print element

上記のように、ループを使用すると、インデックスを追跡し、インデックスを使用してアイテムにアクセスするループメソッドforとは対照的に、反復可能オブジェクトのコンテンツを直接反復できます。while

于 2012-08-03T19:09:47.097 に答える
3

forループは、反復可能オブジェクト(通常はリスト)のすべてのコンテンツをループし、各メンバーオブジェクトに対してアクションを実行し、ループするオブジェクトがなくなるとループから抜け出します。Pythonの標準ドキュメントはこれをよく説明しています:

http://docs.python.org/tutorial/controlflow.html#for-statements

たとえば、コードの例

for x in xrange(10):
    print x

0から9までの数字を出力します

于 2012-08-03T19:07:27.817 に答える
1

与えられた説明でLは、は反復可能です。これは、シーケンス(リスト、タプル、文字列など)またはジェネレーター(例xrange())の場合があります。iterableの各要素は順番に名前にバインドされ、ループ本体が実行されます。 x

于 2012-08-03T19:08:24.667 に答える
0

最初のバージョンでは、インデックス変数iを定義してから、L[i]にアクセスしました。if i == x returnを除いて、iは他に必要ありません。

「forxinsequence」イディオムは、インデックス変数を抽象化します。L [i]に直接アクセスする代わりに、ループ内のLの各アイテムを表す変数があります。

于 2012-08-03T19:10:25.553 に答える
0

それで、私が10個の数のリストを持っているとしましょう(整数、としましょう)。

私がやりたいと思う一般的なタスクは、このリストを調べることです。数が偶数の場合は、10を追加します。

したがって、次のように入力すると:[1、2、3、4、5]次のようになります:[1、12、3、14、5]

ただし、ループすることもできます。各インデックスについて、各インデックスの値が偶数か奇数かを確認します。

しかし、インデックスについて考えたくない場合はどうなりますか?とにかくリスト全体を調べなければならないことはわかっています。要素が偶数か奇数かを見つけるために、要素のインデックスを知る必要はありません。

したがって、代わりに:

lst = [1, 2, 3, 4, 5]
newLst=[]
i=0
while i < 10:
    if (lst[i]%2==0): # if element i of lst is even
        newLst+= [ lst[i]+10 ]
    i+=1

私はただすることができました:

for element in list:
    if(element%2==0):
        newLst+= [ element+10]
    else: newLst+= [element]

そうすることで、インデックスを気にする必要がなくなり、elementリストから1つのアイテムになることがわかります。

于 2012-08-03T19:16:21.863 に答える