玩海象运算符,我有这个合并排序的实现:
def mergesort(array):
if len(array) == 1:
output = array
else:
pivot = len(array) // 2
left = mergesort(array[pivot:])
right = mergesort(array[:pivot])
output = []
while (l := len(left)) or (r := len(right)):
if l and r and left[0] < right[0]:
output.append(left.pop(0))
elif r:
output.append(right.pop(0))
else:
output.append(left.pop(0))
return output
mergesort([66, 93, 85, 46, 56, 88, 56, 75, 55, 99, 87])
但这会返回错误UnboundLocalError: local variable 'r' referenced before assignment
:
---------------------------------------------------------------------------
UnboundLocalError Traceback (most recent call last)
/tmp/ipykernel_134/1678992391.py in <module>
----> 1 mergesort(array)
/tmp/ipykernel_134/4030760045.py in mergesort(array)
5 else:
6 pivot = len(array) // 2
----> 7 left = mergesort(array[pivot:])
8 right = mergesort(array[:pivot])
9
...
/tmp/ipykernel_134/4030760045.py in mergesort(array)
10 output = []
11 while (l := len(left)) or (r := len(right)):
---> 12 if l and r and left[0] < right[0]:
13 output.append(left.pop(0))
14 elif r:
UnboundLocalError: local variable 'r' referenced before assignment
为什么不r
包含在我的 for 循环中,whilel
是?