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]))
我正在尝试在 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]))