1

誰かが次のコード行を説明してもらえますか? ある種のネストされた for ループですか? もしそうなら、誰かが同等のネストされた for ループとして書き直すことができます。allPositions パラメータはリストで、synapsesPerSegment は int 変数です。

for rx,ry in random.sample(allPositions, synapsesPerSegment):
4

2 に答える 2

6

通常のループです。ネスティングなし。random.sampleから要素のリストを返し、多くの項目allPositionsを取ります。synapsesPerSegmentfor ループで代入される変数は形式のタプルであるため、これは がと各反復に代入される形式のタプルのリスト (またはコレクション) である(rx, ry)ことを示唆しています。タプルのリストがある場合、for ループは各反復をそれらの変数に「アンパック」します。たとえば、allPositions(rx, ry)rxry

(a, b) = (99, 100)

次に、この割り当てが展開されます。

(c, d) = (a, b)

そのようc == 99d == 100

質問に戻るために、いくつかのサンプルデータを使用したウォークスルーを次に示します。

私たちが言うなら: allPositions = [(1,100), (2, 200), (3, 300), (4, 400)]

そして、例えば: synapsesPerSegment = 3

から ランダムで3個取るのでrandom.sample(allPositions, synapsesPerSegment)生成するかもしれません。[(3, 300), (1,100), (2, 200)]allPositions

それを繰り返します:

  • 反復 1: rx = 4ry = 400
  • 反復 2: rx = 1ry = 100
  • 反復 3: rx = 2ry = 200
于 2012-08-08T22:52:33.687 に答える
1

これはネストされたループではなく、タプル アンパックと呼ばれます。これを行うこととほぼ同等であると考えるのに役立つかもしれません

for item in random.sample(allPositions, synapsesPerSegment):
    rx = item[0]
    ry = item[1]
于 2012-08-08T23:03:49.683 に答える