2

何をしようとしても脳でこれを実現することはできないようですが、ジェネレーター関数でマッピングする方法が必要です。

たとえば、リスト[1,2,3,4,5,6,7,8,9,10]の各メンバーに、リスト[1,2,3]の対応するメンバーを掛けたい場合は、 [1,2,3]リストがなくなると、再起動します。

   [1  2  3  4  5  6  7  8  9  10]

x  [1  2  3  1  2  3  1  2  3  1 ]
------------------------------------
   [1  4  9  4  10 18 7  16 27 10]

[1,2,3,4,5,6,7,8,9,10]リストの長さがわからない場合、これをどのように行いますか?

4

2 に答える 2

14

itertools モジュールはあなたの友達です。これを行う 1 つの方法はitertools.cycle、2 番目のリストをループするために使用することです。

>>> import itertools
>>> a = range(1, 11)
>>> a
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
>>> b = itertools.cycle([1,2,3])
>>> b
<itertools.cycle object at 0x1004be830>
>>> ans = [i*j for i,j in zip(a,b)]
>>> ans
[1, 4, 9, 4, 10, 18, 7, 16, 27, 10]

zipこれは、用語がなくなると描画が停止するという事実を利用しaています。

于 2012-07-15T22:40:37.850 に答える
1

最初のリストを反復し、他のリストの長さを法とする最初のインデックスで他の要素にアクセスするよりもランダムアクセスがある場合。

反復しかできない場合は、最初のものを反復し、2 番目のリストの終わりに到達するたびに再起動する 2 番目の反復子を用意します。

本当にジェネレーターで行う必要がある場合は、2 つ必要です。アウターは、最初のリスト要素と 2 番目のジェネレーターの値との積を生成します。2 番目のジェネレーターは、2 番目のリスト値を生成し、最後からやり直します。

于 2012-07-15T21:14:19.497 に答える