反向数组编码函数

2024-09-30 01:24:52 发布

您现在位置:Python中文网/ 问答频道 /正文

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

Tags: 函数代码gtforsize错误整数数组
3条回答

有一个更简单的方法。你知道吗

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用于在数组开头插入数据。你知道吗

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

halfsize = size // 2

它使用floor division(//)操作符来确保结果是整数。你知道吗

下一个问题是,您在多个位置引用了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]

你得到了一个异常,因为它是一个列表。在此行中:

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()

作为一个大结局,一个吸血鬼式的方式:

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

相关问题 更多 >

    热门问题