0

私はPythonの初心者です...このループを実行しようとしている10個の要素A [0,10]の配列を扱っています:

for i in range(1, 9):
    C.append((A[i+1]-A[i-1])/2)

各ポイントの平均値を見つけるには...

その後、結果を印刷したい場合:

print(i, A[i], C[i])
print(i, A[i], C[i-2])

2番目の印刷は機能しているだけで、最初の印刷は機能していません..なぜこれをしてください? また、C[1] と C[10] の最初と最後の値も定義する必要がありますが、最初の値は C[-2] であり C[9] であるため、それを行うことはできません ...

誰かがそれを解決する方法を知っていれば....

4

3 に答える 3

2

Python のリスト (つまり a を意味すると思いますlist) をインデックスで反復処理するのは通常ではありません。アイテムのペアで操作しているので、これを行うためのより慣用的な方法は次のようになります。

for prev, next in zip(a, a[2:]):
    # do whatever

zip標準ドキュメントを参照してください。2 つの変数は、シーケンス割り当てzipを使用した結果から割り当てられます。これは、コンマ区切りの変数リストがシーケンスの要素にバインドされている場所です。

あなたがやっている 2 番目のことは、ループ内のリストに追加することです。この種のことは非常に一般的であるため、Python には特定の構文があります。

[(next - prev)/2 for prev, next in zip(a, a[2:])]

これはリスト内包表記と呼ばれます。インタープリターに貼り付けた後にそれが何をするのか推測できない場合は、標準のドキュメントと、Google から入手できる多くの記事でそれについて読んでください。

そのコードが実行されています。

>>> import random
>>> a = range(5,15)
>>> random.shuffle(a)
>>> a
[11, 5, 12, 14, 6, 7, 8, 13, 10, 9]
>>> [(next - prev)/2 for prev, next in zip(a, a[2:])]
[0, 4, -3, -4, 1, 3, 1, -2]
>>>
于 2012-09-22T02:38:59.043 に答える
1

対称差を使用して見つけますCが、エッジポイント (0,9) には隣接するものが 1 つしかありません。エッジポイントの左右の違いを使用して修正できます。

n = len(A) # 10 in your case
C = [0.] * n

if n > 1:
   C[0] = (A[1] - A[0]) / 2.
   C[-1] = (A[-1] - A[-2]) / 2.

for i in xrange(1, n-1):
    C[i] = (A[i+1] - A[i-1]) / 2.

それが適切かどうかは、C後でリストをどのように使用するかによって異なります。

必要な場合C[0] = C[1]は、さらに簡単です。

n = len(A)
C = [0.] * n

for i in xrange(1, n-1):
    C[i] = (A[i+1] - A[i-1]) / 2.

if n > 1:
   C[0] = C[1]
   C[-1] = C[-2] # for symmetry

つまりn == 0、A が空の場合、C は空です。

つまりn == 1、A に要素が 1 つだけある場合、C には要素が 1 つだけあります。C[0] = 0.

于 2012-09-22T02:43:12.780 に答える
0

Python リストは、常に 0 から始まるインデックスが付けられます。

c = []         # c is a list
c.append(3)    # append 3 to the end of the list
print c        # => [3]
print c[0]     # => 3

したがって、コードは (A[0]+A[2])/2 を C[0] に入れ、次に (A[1]+A[3])/2 を C[1] に入れます。

次のように、最初に適切な数の 0 を含むリストとして C を作成したい場合があります。

c = [0.]*10    # create a 10-item list

# calculate smoothed values from a
for i in xrange(1,9):
    c[i] = 0.25*a[i-1] + 0.5*a[i] + 0.25*a[i+2]

# clean up the ends
c[0] = 0.75*a[0] + 0.25*a[1]
c[9] = 0.25*a[8] + 0.75*a[9]
于 2012-09-22T02:29:13.357 に答える