2

3 つのリストがあるとします。

x1 = [1, 2, 3, 4]
x2 = [2, 3, 4, 5]
x3 = [3, 4, 5, 6]

インデックスに基づいて、このリストのリストを減らしたいと思います。

要素を合計することでこれを減らすことができます: -x1[i] + x2[i] + x3[i]

out = [6, 9, 12, 15]

または乗算: -x1[i] * x2[i] * x3[i]

out = [6, 24, 60, 120]

これを達成するためのPythonでの最良の方法は何ですか?

編集:

リストのリストに対してこれを行う方法はありますか?

4

2 に答える 2

7

zipおよびsum関数を使用できます。

out = [sum(i) for i in zip(x1, x2, x3)]

乗算に使用できますreduce(Python 2の場合)

out = [reduce(lambda a, b: a * b, i) for i in zip(x1, x2, x3)]

Python 3reduceから取得できます。functools

ただし、独自の乗算関数を定義して、その関数をリスト内包表記で使用することもできます。

def mult(lst):
    mul = 1
    for i in lst:
        mul *= i
    return mul

out = [mult(i) for i in zip(x1, x2, x3)]

リストのリストがある場合は、 に置き換えるlst = [[1, 2, 3, 4], [2, 3, 4, 5], [3, 4, 5, 6]]だけです。演算子は基本的にリストの要素をアンパックし、それらを個別の引数として関数に渡します。zip(x1, x2, x3)zip(*lst)*

例えば:

out = [sum(i) for i in zip(*lst)]
于 2013-03-13T11:37:20.623 に答える
3

使用zip(*data):

data = [
[1, 2, 3, 4],
[2, 3, 4, 5],
[3, 4, 5, 6]
]

print [sum(col) for col in zip(*data)]

import operator
def product(data):
    return reduce(operator.mul, data)

print [product(col) for col in zip(*data)]

非常に大きなデータで計算したい場合は、NumPy を使用することをお勧めします。

import numpy as np

print np.sum(data, axis=0)
print np.product(data, axis=0)
于 2013-03-13T13:00:08.837 に答える