Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
谁能告诉我什么';Python中的合并排序有什么问题?_Python_Algorithm_Sorting_Mergesort - Fatal编程技术网

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

谁能告诉我什么';Python中的合并排序有什么问题?,python,algorithm,sorting,mergesort,Python,Algorithm,Sorting,Mergesort,它给了我以下的错误,我知道这与左数组或右数组有时不存在这一事实有关。我只是不知道为什么会这样。错误: 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() 文件“/Users/lezoudali/Docu

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

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()
文件“/Users/lezoudali/Documents/Algorithms/sort.py”,第62行,合并中
而i
我的代码:

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)
来自随机导入randint
alist=[randint(1,50)表示范围(10)内的i]
def合并(左、右):
i=j=0
结果=[]
而i
原来我没有从合并函数返回结果。所以函数是returnnone,这就是我遇到的问题。谢谢senderle

  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 
def合并(左、右):
i=j=0
结果=[]
而i
您的
merge
函数没有返回任何内容。您将数据从
左侧
右侧
保存到
结果
,但没有
返回
语句,
合并
只返回
。所以
返回合并(左、右)
也返回
。啊,是的,谢谢先生。:)