Python气泡排序递归。我做错了什么?
我正在为这个类做一个递归赋值。我知道如何使用这个公式,但我相信我在正确打印字典的过程中犯了一些错误。有人能帮我找出如何得到正确的输出吗Python气泡排序递归。我做错了什么?,python,dictionary,recursion,bubble-sort,Python,Dictionary,Recursion,Bubble Sort,我正在为这个类做一个递归赋值。我知道如何使用这个公式,但我相信我在正确打印字典的过程中犯了一些错误。有人能帮我找出如何得到正确的输出吗 [('4213', 'STEM Center', 0), ('4201', 'Foundations Lab', 1), ('4204', 'CS Lab', 2), ('4218', 'Workshop Room', 3), ('4205', 'Tiled Room', 4), ('Out', 'Outside', 5)] [('4201', 'Foundat
[('4213', 'STEM Center', 0), ('4201', 'Foundations Lab', 1), ('4204', 'CS Lab', 2), ('4218', 'Workshop Room', 3), ('4205', 'Tiled Room', 4), ('Out', 'Outside', 5)]
[('4201', 'Foundations Lab', 1), ('4204', 'CS Lab', 2), ('4205', 'Tiled Room', 4), ('4213', 'STEM Center', 0), ('4218', 'Workshop Room', 3), ('Out', 'Outside', 5)]
[('4204', 'CS Lab', 2), ('4201', 'Foundations Lab', 1), ('Out', 'Outside', 5), ('4213', 'STEM Center', 0), ('4205', 'Tiled Room', 4), ('4218', 'Workshop Room', 3)]
[('4204', 'CS Lab', 2), ('4201', 'Foundations Lab', 1), ('Out', 'Outside', 5), ('4213', 'STEM Center', 0), ('4205', 'Tiled Room', 4), ('4218', 'Workshop Room', 3)]
相反,我得到的是:
[('4213', 'STEM Center', 0), ('4218', 'Workshop Room', 3), ('4201', 'Foundations Lab', 1), ('4205', 'Tiled Room', 4), ('4204', 'CS Lab', 2), ('out', 'Outside', 5)]
没有
没有
我已经弄明白了这一点
def recursiveSort(sensor_list,n,t): #Recursive Sort
if n == 0:
return sensor_list
for i in range(n-1):
if sensor_list[i][t] > sensor_list[i + 1][t]:
temp = sensor_list[i]
sensor_list[i] =sensor_list[i + 1]
sensor_list[i + 1] = temp
return recursiveSort(sensor_list,n - 1,t)
Dict = {'4213' : ('STEM Center', 0),
'4201' : ('Foundations Lab', 1),
'4204' : ('CS Lab', 2),
'4218' : ('Workshop Room', 3),
'4205' : ('Tiled Room', 4),
'out' : ('Outside', 5),
}
sensor_list=[]
[ sensor_list.append((key,Dict[key][0],Dict[key][1])) for key in Dict ] #Adding values to a dictionary into a tuple using list comprehension
print sensor_list
print recursiveSort(sensor_list,len(sensor_list),0)
print recursiveSort(sensor_list,len(sensor_list),1)
print sensor_list
我使用下面的适当缩进运行代码,得到了正确的输出
def recursiveSort(sensor_list,n,t): #Recursive Sort
if n == 0:
return sensor_list
for i in range(n-1):
if sensor_list[i][t] > sensor_list[i + 1][t]:
temp = sensor_list[i]
sensor_list[i] =sensor_list[i + 1]
sensor_list[i + 1] = temp
return recursiveSort(sensor_list,n - 1,t)
Dict = {'4213' : ('STEM Center', 0),
'4201' : ('Foundations Lab', 1),
'4204' : ('CS Lab', 2),
'4218' : ('Workshop Room', 3),
'4205' : ('Tiled Room', 4),
'out' : ('Outside', 5),
}
sensor_list=[]
[sensor_list.append((key,Dict[key][0],Dict[key][1])) for key in Dict ] #Adding values to a dictionary into a tuple using list comprehension
print sensor_list
print recursiveSort(sensor_list,len(sensor_list),0)
print recursiveSort(sensor_list,len(sensor_list),1)
print sensor_list
根据您得到的输出,我认为错误在于for循环的缩进不正确。很可能是这样的
if n == 0:
return sensor_list
for i in range(n-1):
if sensor_list[i][t] > sensor_list[i + 1][t]:
temp = sensor_list[i]
sensor_list[i] =sensor_list[i + 1]
sensor_list[i + 1] = temp
for循环根本没有执行,因为
- 当n==0时,因为返回语句在循环之前
- 当n!=0,因为for循环部分位于if块内
可能您的
return recursiveSort(sensor_list,n-1,t)
语句也没有缩进。参数t
应该做什么?还有,你能修好你的缩进吗?这使您的代码很难阅读。请修复您的缩进。您的问题被标记为python3,但您显然使用了python2样式的打印语句。目前,recursiveSort
没有做任何事情,因为在return
语句之后有for
循环,所以它永远不会被调用。要么你在粘贴代码时犯了一些错误,要么你的真实代码中出现了错误。非常感谢你帮我修复了这个错误。我对python非常陌生,因此我不知道如何修复某些问题。您是否知道如何按照第二个元组编号对列表进行递归排序,如1,2,3,4,5?打印递归排序(sensor_list,len(sensor_list),2)
def recursiveSort(sensor_list,n,t): #Recursive Sort
if (n == 0):
return sensor_list
else:
for i in range(n-1):
if sensor_list[i][t] > sensor_list[i + 1][t]:
temp = sensor_list[i]
sensor_list[i] =sensor_list[i + 1]
sensor_list[i + 1] = temp
return recursiveSort(sensor_list,n - 1,t)
Dict = {'4213' : ('STEM Center', 0),
'4201' : ('Foundations Lab', 1),
'4204' : ('CS Lab', 2),
'4218' : ('Workshop Room', 3),
'4205' : ('Tiled Room', 4),
'out' : ('Outside', 5),
}
sensor_list=[]
[ sensor_list.append((key,Dict[key][0],Dict[key][1])) for key in Dict ] #Adding
values to a dictionary into a tuple using list comprehension
print(sensor_list)
print recursiveSort(sensor_list,len(sensor_list),0)
print recursiveSort(sensor_list,len(sensor_list),1)
print sensor_list