3

値のリスト x=[1,-1,-1,1,1,-1,1,-1,1,-1] があり、別の空のリストがあります y=[ ]

値のシグマ合計を取り、xそれらを に格納する関数を作成しようとしていますy

たとえばy[0]、 の合計である必要がありx[0]*x[0] + x[0]*x[1] + x[0]*x[2] + ... + x[0]*x[9]ます。

同様に、y[1]の合計である必要がありx[1]*x[0] + x[1]*x[1] + x[1]*x[2]+ ... + x[1]*x[9]ます。

これは に対して行う必要がありy[0] through y[9]ます。

また、合計でx[i]*x[i]は、ゼロでなければなりません。したがって、たとえば inはゼロy[0]でなければなりません。x[0]*x[0]同様に、 の合計では、はゼロy[1]でなければなりません。x[1]*x[1]

これは私のコードですが、インデックスに関して常に何らかのエラーが発生します。

x=[1,-1,-1,1,1,-1,1,-1,1,-1]
y=[]
def list_extender(parameter):
    for i in parameter:
        parameter[i]*parameter[i]==0
        variable=numpy.sum(parameter[i]*parameter[:])
        if variable>0:
            variable=1
        if variable<0:
            variable=-1
        y.append(variable)
    return y

次に、上記のシグマの合計をprint list_extender(x)含むリストを出力する必要がありますが、常にエラーが発生します。y私が間違っていることは何ですか?ヘルプは非常に高く評価されます!

4

3 に答える 3

7

ここでは、入力と計算が多すぎます。x最初に の合計を計算し、それを使用して の要素を計算した場合、関数はより短く単純になりますy。また、より速く実行されます。

これを行うだけです:

x_sum = sum(x)
y = [item * (x_sum - item) for item in x]
# or, if you really want to store the results into an existing list y
# y[:] = [item * (x_sum - item) for item in x]

sumnumpy を使用している場合は、リスト内包表記を numpy 操作に置き換えます。

import numpy as np
x = np.array([1,-1,-1,1,1,-1,1,-1,1,-1])
y = x * (x.sum() - x)
于 2013-07-12T19:33:43.043 に答える
0

わかりました、これは正しいはずだと思います。読みやすくするために、2 つの理解に分割しました。

まず、x[n] の合計を取得します。

def s(l): return sum([l[0]*l[i] for i in range (2, len(l))])

x のサブリストを渡すだけです。

def sigma_sum(l): return [s(l[i:]) for i range (len(l)-1)]

これはリストを返します [-1, 0, -1, 0, -1, 0, -1, 0, -1]

どちらが正しいですか: x[8]*x[9] からさかのぼると、-1 になります。-1+1 = 0. -1+1+(-1) = -1 など。

于 2013-07-12T18:24:59.000 に答える