0

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
4

4 に答える 4

4

あなたがしようとしていたことから始めましょう。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]
于 2012-06-20T19:49:37.000 に答える
3

コードに多数のエラーがあり、Python チュートリアルを読む必要があります。

for i in aインデックスではなく、a の要素を反復処理します。だから、あなたがしたいi*j、ではありませんa[i]*b[j]。また、append.multi(y)リストに追加する正しい方法ではなく、yとにかく呼び出される変数を定義していないため、何をしようとしているのか明確ではありません。チュートリアルを読んでください。

于 2012-06-20T19:42:05.880 に答える
2

リスト内包表記を使用します。

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]
于 2012-06-20T19:59:48.857 に答える
0

for i in aインデックスを返さず、値を返します。これを行う必要があります:

for i in a: for j in b: multi=i*j ...
于 2012-06-20T19:42:12.130 に答える