【问题标题】:Takes array as parameter and returns a reverse array using loop将数组作为参数并使用循环返回一个反向数组
【发布时间】:2022-08-05 22:18:41
【问题描述】:
# Function that takes array as parameter and returns a reverse array 
# using loop

def reverse_list(arr = []):
    for i in arr[::-1]:
        print(i)
arr_num = [1, 2, 3, 4, 5]

print(reverse_list(arr_num))

我希望我的函数将数组作为参数,但我不确定它的结构/代码是否正确。

  • @BenjaminW.,我已经得到了我想要的输出。但是我想在将数组作为参数时验证我的代码是否正确。
  • 您的函数不返回列表,它只会反向打印结果
  • 如果你想反向打印列表 - 你刚刚做到了。但如果你想要一个反向列表- 你的代码不起作用。
  • 好的,现在我明白了。

标签: python arrays python-3.x list reverse


【解决方案1】:

您的功能将不起作用,因为它不是返回名单。

这是解决此问题的一种方法 - 使用 for 循环:

def reverse_list(arr):
    result = []
    
    for i, _ in enumerate(arr):    # try to use enumerate - it's better in most cases
        result.append(arr[~i])     # use the backward indexing here
        
    return result

【讨论】:

    【解决方案2】:

    只需在函数内创建一个新数组,然后在返回之前附加每个值

    def reverse_list(arr = []):
        new_arr = []
        for i in arr[::-1]:
            # print(i)
            new_arr.append(i)
        return new_arr
    
    
    arr_num = [1, 2, 3, 4, 5]
    
    print(reverse_list(arr_num))
    

    或者简而言之,将反向数组分配给新数组

    def reverse_list(arr = []):
        new_arr = arr[::-1]
        return new_arr
    

    【讨论】:

    • 在第二个 - 不需要new_arr变种。只需返回arr[::-1]会更好。
    • 你是对的,当值太长时,这只是一种风格习惯,只是为了可读性
    【解决方案3】:

    使用列表理解和 reversed 内置函数(它返回一个发电机):

    def reverse_list(lst):
        return [v for v in reversed(lst)]
        # or return list(reversed(lst))
    

    另一个版本,但没有为了-loop 突出显示底层流程:

    使用内置函数slice 选择序列对象中的一系列项目 并从具有__getitem__ 订阅的容器中选择一个元素。

    def reverse_list(lst):
        # slice object
        s = slice(None, None, -1)
        # selection
        return lst.__getitem__(s) # <--> lst[s]
    

    【讨论】:

      【解决方案4】:

      您可以简单地使用 reversed 内置函数;

      >>> reversed([1,2,3,4])
      [4,3,2,1]
      

      但是如果你想要一个函数来返回它,我会建议使用slice 索引:

      def rev_list(lst):
          return lst[::-1]
      

      编辑: 使用后向索引,

      def rev(lst):
          for i,x in enumerate(list(lst)):
              lst[~i] = x
          return lst
      

      您也可以通过列表理解来做到这一点:

      def reverse(lst):
          return [tmp[i] for i in range(0,len(lst)-1,-1)]
      

      【讨论】:

      • 我认为 OP 知道这一点,他正在练习for循环学习语言。
      • 我知道我可以使用它。但我想使用它来实现它for 循环
      猜你喜欢
      • 2013-03-11
      • 1970-01-01
      • 1970-01-01
      • 2011-05-27
      • 2021-03-25
      • 2021-06-15
      • 1970-01-01
      • 2022-01-10
      • 2019-10-18
      相关资源
      最近更新 更多