Python 无法连接列表,因为它们包含非类型元素

Python can't concatenate lists because they include nonetype elements

我正在尝试在 python 中实现快速排序。这是我的代码:

def quicksort(numbers):
    less = []
    is_pivot = []
    larger = []

    if len(numbers) > 1:
        pivot = numbers[0]
        for x in numbers:
            if x < pivot:
                less.append(x)
            elif x == pivot:
                is_pivot.append(x)
            else:
                larger.append(x)
        sorted_list = quicksort(less) + is_pivot + quicksort(larger)
        print(sorted_list)
    else:
        print(numbers)

这给了我以下错误信息:

  File "sortingalgorithms.py", line 101, in <module>
quicksort(numbers)
File "sortingalgorithms.py", line 66, in quicksort
sorted_list = quicksort(less) + is_pivot + quicksort(larger)
File "sortingalgorithms.py", line 66, in quicksort
sorted_list = quicksort(less) + is_pivot + quicksort(larger)
TypeError: unsupported operand type(s) for +: 'NoneType' and 'list'

当我尝试在不连接列表的情况下打印列表时,我得到以下数字 3,2,1

列表的输出
[1.0]
[]
[None, [2.0], None]
[]
[None, [3.0], None]

非类型元素来自哪里,我该如何解决我的问题?谢谢

你的函数 returns None 目前你需要 return 像这样的东西:

def quickSort(numbers):
    less = []
    is_pivot = []
    larger = []

    if len(numbers) <= 1:
        return numbers
    else:
        pivot = numbers[0]
        for x in numbers:
            if x < pivot:
                less.append(x)
            elif x > pivot:
                larger.append(x)
            else:
                is_pivot.append(x)
        less = quickSort(less)
        larger = quickSort(larger)
        return less + is_pivot + larger

test = [87, 3, 42, -893, -5, 107, 3, 27, 0]
test = quickSort(test)
print(test)

输出:

[-893, -5, 0, 3, 3, 27, 42, 87, 107]

试一试here!

好的,所以问题完全来自这一行:

sorted_list = quicksort(less) + is_pivot + quicksort(larger)

这里仔细想想,你的函数不是returning什么的。因此,quicksort(less)quicksort(larger)将returnNone

因此,sorted_list 变为 [None, [2.0], None]

基本上,将 print 行替换为 return 语句,然后在函数外部打印。

这是我的解决方案:

def quicksort(numbers):
    less = []
    is_pivot = []
    larger = []

    if len(numbers) > 1:
        pivot = numbers[0]
        for x in numbers:
            if x < pivot:
                less.append(x)
            elif x == pivot:
                is_pivot.append(x)
            else:
                larger.append(x)
        sorted_list = quicksort(less) + is_pivot + quicksort(larger)
        return sorted_list # Replaced print statement here.
    else:
        return numbers  # Replaced print statement here.

print(quicksort([1,3,4,2,5,0]))