python - 谁能告诉我 Python 中的合并排序有什么问题?

标签 python algorithm sorting mergesort

它给了我以下错误,我知道这与左数组或右数组有时为 None 这一事实有关。我只是不知道为什么会这样。错误:

File "/Users/lezoudali/Documents/Algorithms/sort.py", line 62, in merge

    while i < len(left) and j < len(right):

TypeError: object of type 'NoneType' has no len()

我的代码:

from random import randint 

alist = [randint(1,50) for i in range(10)]

def merge(left, right):
  i = j = 0 
  result = []
  while i < len(left) and j < len(right):
    if left[i] < right[j]:
        result.append(left[i])
        i += 1
    else:
        result.append(right[j])
        j += 1
  while i < len(left):
    result.append(left[i])
    i += 1
  while j < len(right):
    result.append(right[j])
    j += 1

def mergesort(alist):
  if len(alist) == 1:
    return alist
  mid = len(alist) // 2
  left = mergesort(alist[:mid])
  right = mergesort(alist[mid:])
  return merge(left, right)

print mergesort(alist)

最佳答案

原来我没有从合并函数返回结果。所以函数返回 None,这是我遇到的问题。谢谢发件人!

  def merge(left, right):
    i = j = 0 
    result = []
    while i < len(left) and j < len(right):
      if left[i] < right[j]:
        result.append(left[i])
        i += 1
      else:
        result.append(right[j])
        j += 1
    while i < len(left):
      result.append(left[i])
      i += 1
    while j < len(right):
      result.append(right[j])
      j += 1 
    return result 

关于python - 谁能告诉我 Python 中的合并排序有什么问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26636841/

相关文章:

Java 编程 : Dynamic Programming on stairs example

algorithm - 超过 500 万个向量的 KMeans 聚类

java - 优化排序矩阵中第 N 个最大元素的代码

python - XGBoost 与 GridSearchCV、缩放、PCA 和 sklearn 管道中的早期停止

python - 使用 h5py 强制 hdf5 文件的数据类型

python - Python中有sqlite3.connect的独占创建模式吗? (仅当文件尚不存在时才创建)

python - 在掩码数组中查找出现频率最高的元素

arrays - 维护 bash 关联数组的插入顺序

java - 如何对对象数组进行排序 key 使用Java?

python - 如何在Django中将unique=true的外键设置为 "optional"?