Python快速排序函数进入无限循环
我有一份字典和联系人的清单Python快速排序函数进入无限循环,python,algorithm,recursion,infinite-loop,quicksort,Python,Algorithm,Recursion,Infinite Loop,Quicksort,我有一份字典和联系人的清单 contacts = [{'first':'asasdasd', 'last':'sddafs','email':'asdsadas'}, {'first':'asasdasd', 'last':'sddafs','email':'asdsadas'}] 我想使用快速排序算法,按“last”键对列表中的词典进行排序 less = [] greater = [] def qsort_last(listD): if len(listD) < 2:
contacts = [{'first':'asasdasd', 'last':'sddafs','email':'asdsadas'},
{'first':'asasdasd', 'last':'sddafs','email':'asdsadas'}]
我想使用快速排序算法,按“last”键对列表中的词典进行排序
less = []
greater = []
def qsort_last(listD):
if len(listD) < 2:
return listD
else:
pivot = contacts[0]['last']
for i in range(len(listD)):
if listD[i]['last'] <= pivot:
less.append(listD[i])
else:
greater.append(listD[i])
return qsort_last(less) + [contacts[0]] + qsort_last(greater)
print(qsort_last(contacts))
less=[]
更大=[]
def qsort_last(列表D):
如果len(listD)<2:
返回列表
其他:
pivot=联系人[0]['last']
对于范围内的i(len(listD)):
如果listD[i]['last']则问题在于您不断向less
和greer
列表中添加元素,因此它们将不断增长而不受限制
此外,由于pivot:
更大的.append(listD[i])
返回qsort_last(较少)+[联系人[0]]+qsort_last(较大)
已更新。现在它成功了。谢谢大家的帮助
def qsort_last(listD):
less = []
greater = []
middle=[]
if len(listD) < 2:
return listD
else:
pivot = listD[0]['last']
for i in range(len(listD)):
if listD[i]['last'] < pivot:
less.append(listD[i])
elif listD[i]['last'] > pivot:
greater.append(listD[i])
elif listD[i]['last'] == pivot:
middle.append(listD[i])
return qsort_last(less) + middle + qsort_last(greater)
def qsort_last(列表d):
减=[]
更大=[]
中间=[]
如果len(listD)<2:
返回列表
其他:
pivot=listD[0]['last']
对于范围内的i(len(listD)):
如果listD[i]['last']pivot:
更大的.append(listD[i])
elif listD[i]['last']==pivot:
middle.append(listD[i])
返回最后一个排序(较小)+中间+最后一个排序(较大)
什么是listD
?您没有以参数的形式向我们显示您的函数调用listD
。您似乎混淆了contacts和listD之类的内容。对不起,已在范围(len(listD))中为i更新了:递归错误:与列表中的2个字典相比,最大递归深度已超过,但是如果有9个字典:在比较中超过了最大递归深度由于存在另一个错误,您总是使用contacts[0]作为轴心,而不是listD[0]。修正了,现在应该可以工作了。
def qsort_last(listD):
less = []
greater = []
middle=[]
if len(listD) < 2:
return listD
else:
pivot = listD[0]['last']
for i in range(len(listD)):
if listD[i]['last'] < pivot:
less.append(listD[i])
elif listD[i]['last'] > pivot:
greater.append(listD[i])
elif listD[i]['last'] == pivot:
middle.append(listD[i])
return qsort_last(less) + middle + qsort_last(greater)