

jsonでリストを取り出し変数に複数の値が入っているとします。

A = [1,2,3,4,5]

B = [-1,-2,-3,-4,-5]

この時にA + B をしたいのですがうまくいきません

Aの１とBの-1を＋した値をABに代入  
Aの2とBの-2を＋した値をABに代入  
Aの3とBの-3を＋した値をABに代入  
Aの4とBの-4を＋した値をABに代入  
Aの5とBの-5を＋した値をABに代入

と動かしたいです。ABは最終的に5つの値をもつ変数にしたいです。

[code]

    A = [1,2,3,4,5]
    B = [-1,-2,-3,-4,-5]
    
    A + B = AB
    print(AB)
    
[/code]

エラーコード

[code]

    SyntaxError: can't assign to operator
    
[/code]


CC BY-SA 4.0
2018-07-08T05:47:19.577
45413
2018-07-08T23:26:36.283
2018-07-08T13:36:38.080
19110
24756
question
python
jsonで値を取り出した複数の変数の演算子について


## エラーの意味

> `SyntaxError: can't assign to operator` : 構文エラーです． operator には assign できないよ！

ここでいう operator は + のことで，要するに `A+B = AB` は `A+B` に `AB`
をいわば代入していると解釈されて，それは無理，となるわけです． `AB` を `A+B` で定義したいなら書き方はこう

[code]

    AB = A+B
    
[/code]

（ちなみにここまでについては，やはり一旦入門書というか文法の基礎をおさらいなさることをおすすめします．）

## 正しい書き方

やってみるとわかりますが上の書き方では `AB` はこうなります

[code]

    [1, 2, 3, 4, 5, -1, -2, -3, -4, -5]
    
[/code]

これは [list](https://docs.python.org/3/library/stdtypes.html#list) に対しては `+`
は2つのリストをくっつける，というように[定義されている](https://docs.python.org/3/library/stdtypes.html#typesseq-
common)ためです．(Numpy とかだと事情が変わりますが）リストについて element-wise に和を取るのは普通に書くしかなくて，
[@metropolis](https://ja.stackoverflow.com/users/16894/metropolis)
さんの[仰る](https://ja.stackoverflow.com/questions/45413#comment47295_45413)ように

[code]

    AB = map(sum, zip(A, B))
    
[/code]

か，

[code]

    from operator import add
    AB = map(add, A,B)
    
[/code]

あたりかと思います．

(リストとか行列とかそういう複数の要素をもつものに対して，要素ごとに演算することを [element-
wise](https://en.wiktionary.org/wiki/elementwise) に，といいます．上の `A+B`
は逆にリスト全体としての演算で，行列積なんかも同じ扱いに入ります)


CC BY-SA 4.0
2018-07-08T14:58:10.603
45430
2018-07-08T15:09:13.307
2018-07-08T15:09:13.307
2901
2901
45413
answer


Pythonでデータを扱いたいのであれば、PandasとNumPyも勉強しましょう。ベクトル演算ができ多くのデータを扱うための機能があります。今回の問題も次のように簡単に記述することができます。

[code]

    import numpy as np
    
    a = np.array([1, 2, 3, 4, 5])
    b = np.array([-1, -2, -3, -4, -5])
    ab = a + b
    print(ab)
    
[/code]


CC BY-SA 4.0
2018-07-08T23:26:36.283
45434
2018-07-08T23:26:36.283
15171
45413
answer