0

数値の配列Aが逆の順序でAの要素を持つ配列Bを返すPython関数を作成するにはどうすればよいですか? Pythonで逆関数を使用せずに、代わりにforループを使用しますか?

これは私がこれまでに持っているものであり、シェルで関数main()を呼び出すと、いくつかのエラーが発生し、そのうちの1つは「B」が定義されていません。

def ReverseArray(A):
    n = len(A)
    for i in range(0, n-1):
        B[n-i-1] = A[i]
    return (B)

def main():
    A = [13, 21, 15, 38, 49]  # Test case for ReverseArray function
    B = ReverseArray(A)
    print(B)

どこで私は間違えましたか?

4

2 に答える 2

2

あなたが言うように、あなたの最初の問題はあなたが定義していないということですB

明白な答えは、を定義することBです。あなたが蓄積しているときの開始値は何listですか?おそらく空っぽlistですよね?それで:

def ReverseArray(A):
    B = []
    n = len(A)
    for i in range(0, n-1):
        B[n-i-1] = A[i]
    return (B)

あなたが遭遇する次の問題はそれIndexErrorからですB[n-i-1] = A[i]Bこれは、アイテムをインプレースで変更しようとしているためです。そのためn、最初にアイテムを用意する必要があります。つまり、と同じ数のアイテムを含むものが必要ですA。のコピーはAどうですか?

B = list(A)

または、リスト内包表記を理解している場合は、次の方がよい場合があります。

B = [None for _ in A]

最後に、あなたのアルゴリズムは実際には正しくありません。たとえば、を指定するAと、は、nになり5range(0, n-1)はになります[0, 1, 2, 3]。これは、あなたB[0]が何にも設定しないことを意味します。

Python関数がパラメータを除外するrange範囲を返すことに気付いていないかもしれません。ただ(または、もっと簡単に言えば)があなたが望むものです。stoprange(0, n)range(n)

于 2013-03-19T23:24:49.247 に答える
2

このようにリストを逆方向に反復してから、各要素をリストBに追加できます。

def ReverseArray(A):
    B = list()
    for i in xrange(len(A)-1,-1,-1):
        B.append(A[i])
    return B
于 2013-03-19T23:25:55.090 に答える