numpy を使用せずに 2 つの配列を乗算しようとしています。しかし、「multi = a[i]*b[j]」という行で、インデックスが範囲外であることを示すエラーが表示されます。
a = [1,2,3]
b = [4,5,6]
multi = [0,0,0,0,0,0,0,0]
for i in a:
for j in b:
multi = a[i]*b[j]
append.multi(y)
print multi
あなたがしようとしていたことから始めましょう。for ループ:
a = [1,2,3]
b = [4,5,6]
ab = []
for x in a:
for y in b:
ab.append(x * y)
print(ab)
[4, 5, 6, 8, 10, 12, 12, 15, 18]
さて、ここでPythonデータ構造を読むことをお勧めします
for ループの使用方法を理解すれば、リスト内包表記を理解するのは簡単です。
これらは for ループと同じですが、結果は直接リストに入ります。これはいいね。実際、ほとんどの人がこのようにしているのはとても良いことです。
a = [1,2,3]
b = [4,5,6]
ab = [ x * y for x in a for y in b ]
print(ab)
[4, 5, 6, 8, 10, 12, 12, 15, 18]
for ... ab.append(x * y)
だから、書く代わりに [ x * y for ... ]
コードが次のように書かれている場合:
ab = ( x * y for x in a for y in b )
それはそれを発電機にするでしょう。これらも多くの人が利用しています。これらは遅延リストと考えてください。その中に何かを入れることはできますが、それを使って何かをしようとするまでは評価されません。
print(ab)
<generator object <genexpr> at 0x4d7058>
print( list(ab) )
[4, 5, 6, 8, 10, 12, 12, 15, 18]
インデックスを使用してこれを解決しようとしている場合は、おそらく次を使用します。
[a[x] * b[y] for x,_a in enumerate(a) for y,_b in enumerate(b)]
次のような楽しいこともできます。
from operator import mul
a = [1,2,3]
b = [4,5,6]
ab = list(map(mul, a,b))
print(ab)
[4, 10, 18]
使用した場合:
ab = map(mul, a,b)
マップ オブジェクトを作成します。これは とほとんど同じ< generator >
です。
print(ab)
>>> <map object at 0x4d4eb0>
print( list(ab) )
>>> [4, 10, 18]
または、3 つのリストがある場合:
a = [1,2,3]
b = [4,5,6]
c = [7,8,9]
abc = list(map(lambda x,y,z: x * y * z, a,b,c))
print(abc)
[28, 80, 162]
本当にしたい場合は、次のことができます。
from itertools import product
from functools import reduce
from operator import mul
a = [1,2,3]
b = [4,5,6]
ab = list(map(lambda x: reduce(mul,x), product(a,b)))
--or--
ab = list(map(lambda x: mul(*x), product(a,b)))
print(ab)
[4, 5, 6, 8, 10, 12, 12, 15, 18]
コードに多数のエラーがあり、Python チュートリアルを読む必要があります。
for i in a
インデックスではなく、a の要素を反復処理します。だから、あなたがしたいi*j
、ではありませんa[i]*b[j]
。また、append.multi(y)
リストに追加する正しい方法ではなく、y
とにかく呼び出される変数を定義していないため、何をしようとしているのか明確ではありません。チュートリアルを読んでください。
リスト内包表記を使用します。
a = [1,2,3]
b = [4,5,6]
m = [x * y for x in a for y in b]
print m
>>> [4, 5, 6, 8, 10, 12, 12, 15, 18]
for i in a
インデックスを返さず、値を返します。これを行う必要があります:
for i in a: for j in b: multi=i*j ...