2013-03-19 66 views
0

如何编写一个Python函数,该函数给定数组A的数组返回一个数组B,该数组B具有相反顺序的A元素? 没有在python中使用反向函数,而是使用for循环?反转一维数组--PYTHON

这是我到目前为止,然后我在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) 

我哪里错了?

+0

“一些错误” ...... – zch 2013-03-19 23:21:48

+0

这是它给了我回溯(最近通话最后一个) : 文件 “”,第1行,在 主() 文件 “C:\ .....”,第12行,在主 B = ReverseArray(A) 文件“C:\ ... ..“,第7行,在ReverseArray B [ni-1] = A [i] NameError:全局名称'B'未定义 – cah 2013-03-19 23:23:14

回答

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) 

你会碰到的一个问题是从B[n-i-1] = A[i]IndexError。这是因为你试图修改B的项目,所以它必须有n项目开始。换句话说,你想要的物品和A一样多。如何A副本?

B = list(A) 

或者,如果你了解列表解析,这可能会更好:

B = [None for _ in A] 

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

你可能没有意识到的Python range函数返回范围的排除stop参数。只需要range(0, n)(或者更简单地说,range(n))就是你想要的。

+1

您是否阅读过b除了第一个代码示例之外,还有它说“你会遇到的下一个问题”的部分?因为它也告诉你如何解决这个问题。 – abarnert 2013-03-19 23:28:39

+0

是啊对不起,我没有看到它,但现在我得到它的感谢! – cah 2013-03-19 23:33:33

2

您可以向后遍历列表这样的,那么每一个元素添加到列表B.

def ReverseArray(A): 
    B = list() 
    for i in xrange(len(A)-1,-1,-1): 
     B.append(A[i]) 
    return B 
+1

在附注上,您可以使用myList [:: - 1]来反转列表。 – 2013-03-19 23:27:33

+1

我认为这是比OP更好的解决方案,也是教授可能会接受的。但是它并没有回答他“为什么我的代码不工作”的问题。(这就是说,这不是真的意味着“为什么我的代码不工作”的问题,所以这可能不成问题。) – abarnert 2013-03-19 23:33:21

+0

我明白了。他的代码不起作用,因为他没有在函数中声明B.即使他将它实例化为一个空列表,他试图使用B [ni-1]来访问B的元素,这是不可能的,因为B中没有东西:) – 2013-03-19 23:36:12