【问题标题】:Python Bubble sort recursion. What am I doing wrong?Python 冒泡排序递归。我究竟做错了什么?
【发布时间】:2018-12-22 05:26:14
【问题描述】:

我正在为班级做递归作业。我了解如何使用该公式,但我相信我在正确打印字典方面做错了。有人可以帮我弄清楚如何获得正确的输出吗?

[('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

【问题讨论】:

  • t 参数应该做什么?另外,你能修复你的缩进吗?它使您的代码难以阅读。
  • 请修正缩进。你的问题被标记为python3,但你显然使用了python2风格的打印语句。
  • 目前,recursiveSort 没有做任何事情,因为您在 for 循环之后有 return 语句,所以它永远不会被调用。要么您在此处粘贴代码时出错,要么您的真实代码中出现错误。

标签: python dictionary recursion bubble-sort


【解决方案1】:

我用正确的缩进运行代码,如下所示,得到了正确的输出。

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时,因为return语句在循环之前
  • 当 n != 0 时,因为 for 循环部分在 if 块内。

可能你的return recursiveSort(sensor_list,n - 1,t) 语句也没有缩进。

【讨论】:

  • 非常感谢你们帮我解决了这个错误。我对 python 很陌生,所以我不确定如何解决某些问题。
  • 您是否也知道如何按第二个元组编号递归排序列表,如 1,2,3,4,5?
  • 打印递归排序(sensor_list,len(sensor_list),2)
【解决方案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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-07-18
    • 2020-11-11
    • 2019-09-08
    • 2013-08-06
    • 1970-01-01
    • 1970-01-01
    • 2019-12-23
    • 2013-12-02
    相关资源
    最近更新 更多