0

私はリスト内包表記が初めてで、タプルを使って何かしたいと思っています。これが問題です:

2 つのベクトルl1とが与えられた場合l2、それらをタプルに結合したいと考えています。次に、すべてを合計する前に乗算したいと思います。

たとえば、 と がある場合、それらを zip 関数で結合しl1 = [1,2,3]て.l2 = [4,5,6][(1,4),(2,5),(3,6)]

この後、タプルに 1 を乗算して追加します。となり[(1*4)+1,(2*5)+1,(3*5)+1]、 を与える[4,11,16]

その後、4+11+1631 を与えるリストを合計したいと思います。

tuple(map(operator.add, a, b))どちらがタプルを合計できるかを以前に学びました。しかし、今はもう 1 つ計算を行う必要があるため、どのように開始すればよいかわかりません。リスト内包表記で一行で済むと良いです。誰でもアイデアを得ましたか?

4

4 に答える 4

3

検討:

sum(a * b + 1 for a, b in zip(l1, l2))

次のことを確認してください。

>>> l1 = [1,2,3]; l2 = [4,5,6]
>>> sum(a * b + 1 for a, b in zip(l1, l2))
35
于 2016-01-18T03:05:59.470 に答える
0

あなたの計算は少しずれていると思いますが、これが欲しいですか?

>>> l1 = [1,2,3]
>>> l2 = [4,5,6]
>>> l3 = zip(l1, l2)
>>> l3
[(1, 4), (2, 5), (3, 6)]
>>> l4 = [i*j for i, j in l3]
>>> l4
[4, 10, 18]
>>> l5 = [x+1 for x in l4]
>>> l5
[5, 11, 19]
>>> sum(l5)
35
于 2016-01-18T03:06:07.503 に答える
0

これを試して :

>>> l1 = [1,2,3]
>>> l2 = [4,5,6]
>>> sum([(i*j)+1 for (i, j) in zip(l1, l2)])
35
于 2016-01-18T03:06:18.973 に答える
0

マップによる実装

def f(xs, ys, k=1):
    """
    xs : first list
    ys : second list
    k  : sum constant -- problem case = 1
    """
    return sum(map(lambda x, y: x*y + k, xs, ys))

print f([1,2,3],[4,5,6], 1) == 35
于 2016-01-18T03:38:10.747 に答える