-1

请帮我修复此代码。这是一个反转整数数组的函数,例如:[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])
4

3 回答 3

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]
于 2013-10-08T21:15:26.237 回答
1

有一个更简单的方法。

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

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

它使用队列数据结构(使用插入将数据入队)来反转它,然后读取队列的数据。Insert 用于在数组的开头插入数据。

于 2017-08-08T23:38:08.960 回答
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)

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

而且,如果您不是出于学习目的这样做,请使用 reverse 内置函数来处理列表

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

而且,作为压轴戏,一种pythonic的方式来做到这一点:

>>>> a = [1,2,3,4]
>>>> a[::-1]
     [4,3,2,1]
于 2013-10-08T21:43:53.150 回答