反向数组代码函数错误

时间:2013-10-08 21:14:22

标签: python arrays list reverse

请帮我修复此代码。这是一个反转整数数组的函数,例如:[1,2,3,4,5] - > [5,4,3,2,1]。错误是:

builtins.TypeError: unsupported operand type(s) for /: 'list' and 'int'

请给我一个解决方案。谢谢

def reverse(array):
   '''
   [1,2,3,4,5] -> [5,4,3,2,1]
   This method returns a reversed integer array.
   '''
   size = len(array)
   halfsize = array/2
   size -= 1
   r = array[size]
   temp = None
   for s in range(0, halfsize):
      temp = arrayOne[s]
      array[s] = r
      array[size] = temp
      size -= 1
      r=arrayOne[size]
   return arrayOne


a = reverse ([1, 4, 3, 4, 5])

3 个答案:

答案 0 :(得分:2)

您需要划分长度,而不是列表:

halfsize = size // 2

这使用分区(//)运算符来确保结果是整数。

您的下一个问题是您在多个地方引用arrayOne,但仅将您的参数命名为array;修复这些引用并且您的函数有效:

>>> def reverse(array):
...    '''
...    [1,2,3,4,5] -> [5,4,3,2,1]
...    This method returns a reversed integer array.
...    '''
...    size = len(array)
...    halfsize = size // 2
...    size -= 1
...    r = array[size]
...    temp = None
...    for s in range(0, halfsize):
...       temp = array[s]
...       array[s] = r
...       array[size] = temp
...       size -= 1
...       r=array[size]
...    return array
... 
>>> a = reverse ([1, 4, 3, 4, 5])
>>> a
[5, 4, 3, 4, 1]

你的功能可以简化一些;您不需要temp变量,因为Python允许您就地交换值:

def reverse(array):
    '''[1,2,3,4,5] -> [5,4,3,2,1]

    This method returns a reversed integer array.

    '''
    size = len(array)
    halfsize = size // 2
    size -= 1
    for s in range(halfsize):
        array[s], array[size] = array[size], array[s]
        size -= 1
    return array

另请注意,您正在将列表撤消;没有必要在这里返回结果列表对象:

>>> a = [4, 6, 42, 1, -5]
>>> reverse(a)
[-5, 1, 42, 6, 4]
>>> a
[-5, 1, 42, 6, 4]

答案 1 :(得分:1)

有一种更简单的方法。

def reverseArray(array):
    queue = []
    for element in array:
        queue.insert(0, element)
    return queue

例如,如果您输入[2,3,4,5],它将返回[5,4,3,2]。

它使用queue 数据结构(使用insert来排队数据)以便反转它,然后读取队列的数据。正在使用Insert在数组的开头插入数据。

答案 2 :(得分:0)

你得到一个例外,因为数组是一个列表。在这一行:

halfsize = array/2

您将列表除以int。你应该使用

halfsize = size/2

相反。但是,由于我不知道arrayOne来自哪里,我无法确切地说出问题所在。

但是,我会在这里发布一个替代解决方案,它使用递归:)

def reverse(array, answer=None):
    if len(array) == 0:
        return answer
    if not answer:
        answer = []
    answer.append(array.pop())
    return reverse(array, answer)

递归是你的朋友:) 尝试使用它。

而且,如果您不是出于学习目的而使用,请使用列表的反向内置函数

>>>> a = [1,2,3,4,5]
>>>> a = a.reverse()

而且,作为一个伟大的结局,一个pythonic方式来做到这一点:

>>>> a = [1,2,3,4]
>>>> a[::-1]
     [4,3,2,1]