0

如何编写一个 Python 函数,给定一个数字数组 A 返回一个数组 B,其中 A 的元素以相反的顺序排列? 不在python中使用reverse函数,而是使用for循环?

这就是我到目前为止所拥有的,然后我在 shell 中调用函数 main(),它给了我一些错误,其中之一是未定义“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. 累积 a 时的起始值是list多少?大概是空list的吧?所以:

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

您将遇到的下一个问题是IndexErrorfrom that B[n-i-1] = A[i]。那是因为您正在尝试B就地修改 的项目,所以它必须有n项目开始。换句话说,您想要的东西与A. 副本怎么样A

B = list(A)

或者,如果您了解列表推导,这可能会更好:

B = [None for _ in A]

最后,您的算法实际上并不正确。例如,给定您的A, nwill be 5, so range(0, n-1)will be [0, 1, 2, 3]。这意味着你永远不会设置B[0]任何东西。

您可能没有意识到 Python函数返回的range范围不包括stop参数。只是range(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 回答