冒泡排序列表排序 Returns None In Python

Bubble Sorting List Sorting Returns None In Python

我正在尝试了解冒泡排序算法在 python 中的工作原理。 但是,当我打印输出时,对列表 returns None 进行排序。

这是我的代码

arr = ["A", "B", "C", "D", "Z", "Y"]


def _sort(nums):
    for i in range(len(nums)-1, 0, -1):
        for j in range(i):
            if nums[j] > nums[j+1]:
                temp = nums[j+1]
                nums[j+1] = temp

    
_sorted = _sort(arr)
print(_sorted)

这是我打印出来的结果。

None

您忘记包含 return 个数字。

你还没有 return编辑任何东西..ie return nums

您没有指定函数 return,因此它只是 returns None

def _sort(nums):
  for i in range(len(nums)-1, 0, -1):
    for j in range(i):
      if nums[j] > nums[j+1]:
        temp = nums[j+1]
        nums[j+1] = temp
  return nums

这应该可以解决问题。 只是为了完整性:

  • 除了 return 任何东西,您还应该能够在函数调用后再次访问 arr
  • 你的算法还有一些基本错误

第一,算法不对。你应该这样做:

def _sort(nums):
    for i in range(len(nums)-1, 0, -1):
        for j in range(i):
            if nums[j] > nums[i]:
                temp = nums[i]
                nums[i] = nums[j]
                nums[j] = temp

其次,函数没有return任何东西。这就是为什么 returns None。但是,列表 arr 现在已排序。您可以通过 运行 此代码进行检查:

arr = ["A", "B", "C", "D", "Z", "Y"]


def _sort(nums):
    for i in range(len(nums)-1, 0, -1):
        for j in range(i):
            if nums[j] > nums[i]:
                temp = nums[i]
                nums[i] = nums[j]
                nums[j] = temp
                

_sort(arr)  # This function does not return anything
print(arr)

您的 _sort 函数尝试“就地”对您的数组进行排序,这意味着它直接对给定数组进行操作而不创建新数组。因此,该功能不需要 return 任何东西,而您的功能确实不需要。所以通过写 _sorted = _sort(arr),变量 _sorted 被分配给 None 因为 _sort 没有 return 任何东西。如果您改为编写以下内容,

# _sorted = _sort(arr)
_sort(arr)
print(arr)

您应该会看到您的数组已被修改。