为了账号安全,请及时绑定邮箱和手机立即绑定

如何修复类型错误:在 Python 中工作时冒泡排序列表中的“列表”对象不可调用错误

如何修复类型错误:在 Python 中工作时冒泡排序列表中的“列表”对象不可调用错误

小唯快跑啊 2021-09-25 14:35:15
我试图使用冒泡排序对列表进行排序并编写了这段代码,但是出现了一个显示 typeerror:'list' object not callable 的错误。我在哪里做错了?我试图以不同的方式输入我的列表元素,即,包括十进制数字等,但仍然不起作用。def swap(a,b):    if a > b:        t = a        a = b        b = t        return a,bdef sort(list):    k=0    for i in range(len(list)):        for j in range(len(list)):            if list[j] > list[j+1]:                (a,b) = swap(list[j],list(j+1))                list[j] = a                list[j+1] = b                k+=1                    print(k,'  ',list)            else:                k+=1                continue    print(list)list = [5,6,89,2,1,42,23,46,0,83]sort(list)我希望列表为 [0,1,2,5,6,23,42,83,89]
查看完整描述

3 回答

?
翻过高山走不出你

TA贡献1875条经验 获得超3个赞

'list' object not callable当您使用()而不是时会发生错误[]。要修复它,请替换(a,b) = swap(list[j],list(j+1))为 (a,b) = swap(list[j],list[j+1])


以下代码给出了您所需的结果。


功能:


   def swap(a,b):

       if a > b:

           t = a

           a = b

           b = t

       return a,b

   def sort(list):

       k=0

       for i in range(len(list)):

           for j in range(len(list)-1): #Change Here

               if list[j] > list[j+1]:

                   (a,b) = swap(list[j],list[j+1]) #Change here

                   list[j] = a

                   list[j+1] = b

                   k+=1

                   #print(k,'  ',list)  #Change here

               else:

                   k+=1

                   continue


        print(list)


    list = [5,6,89,2,1,42,23,46,0,83]

    sort(list)


查看完整回答
反对 回复 2021-09-25
?
精慕HU

TA贡献1845条经验 获得超8个赞

list(j+1)是错的。“列表”对象不可调用。同样在冒泡排序中,第二个循环直到列表中的倒数第二个元素ie. range(len(list)-1)


def swap(a,b):

    if a > b:

        t = a

        a = b

        b = t

        return a,b

def sort(list):

    k=0

    for i in range(len(list)):

        for j in range(len(list)-1): #Change Here

            if list[j] > list[j+1]:

                (a,b) = swap(list[j],list[j+1]) #Change here

                list[j] = a

                list[j+1] = b

                k+=1

                print(k,'  ',list)

            else:

                k+=1

                continue


    print(list)


list = [5,6,89,2,1,42,23,46,0,83]

sort(list)

输出


3    [5, 6, 2, 89, 1, 42, 23, 46, 0, 83]

4    [5, 6, 2, 1, 89, 42, 23, 46, 0, 83]

5    [5, 6, 2, 1, 42, 89, 23, 46, 0, 83]

6    [5, 6, 2, 1, 42, 23, 89, 46, 0, 83]

7    [5, 6, 2, 1, 42, 23, 46, 89, 0, 83]

8    [5, 6, 2, 1, 42, 23, 46, 0, 89, 83]

9    [5, 6, 2, 1, 42, 23, 46, 0, 83, 89]

11    [5, 2, 6, 1, 42, 23, 46, 0, 83, 89]

12    [5, 2, 1, 6, 42, 23, 46, 0, 83, 89]

14    [5, 2, 1, 6, 23, 42, 46, 0, 83, 89]

16    [5, 2, 1, 6, 23, 42, 0, 46, 83, 89]

19    [2, 5, 1, 6, 23, 42, 0, 46, 83, 89]

20    [2, 1, 5, 6, 23, 42, 0, 46, 83, 89]

24    [2, 1, 5, 6, 23, 0, 42, 46, 83, 89]

28    [1, 2, 5, 6, 23, 0, 42, 46, 83, 89]

32    [1, 2, 5, 6, 0, 23, 42, 46, 83, 89]

40    [1, 2, 5, 0, 6, 23, 42, 46, 83, 89]

48    [1, 2, 0, 5, 6, 23, 42, 46, 83, 89]

56    [1, 0, 2, 5, 6, 23, 42, 46, 83, 89]

64    [0, 1, 2, 5, 6, 23, 42, 46, 83, 89]

[0, 1, 2, 5, 6, 23, 42, 46, 83, 89]


查看完整回答
反对 回复 2021-09-25
?
慕容森

TA贡献1853条经验 获得超18个赞

swap(list[j],list(j+1))

应该

swap(list[j],list[j+1])

至少那是语法错误的地方,没有检查你的算法


查看完整回答
反对 回复 2021-09-25
  • 3 回答
  • 0 关注
  • 224 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号