-3

我是 Python 新手。我们如何一步一步地解释这段代码。我无法理解某些部分。

myList=[43,21,12,80,3,2,35]
end=len(myList)-1
while (end!=-1):
    swapped=-1
    for i in range(0,end):
        if myList[i]>myList[i+1]:
            temp=myList[i]
            myList[i]=myList[i+1]
            myList[i+1]=temp
            swapped=i
    end=swapped
print(myList)
4

2 回答 2

1

如果您忘记添加会中断循环的代码,使用while True会创建一个无限循环。在这种情况下,只有在 for 循环结束时仍为 -1时才会发生中断。因此下面的代码:swapped

myList=[43,21,12,80,3,2,35]
end=len(myList)-1
while True:
    swapped=-1
    for i in range(0,end):
        if myList[i]>myList[i+1]:
            temp=myList[i]
            myList[i]=myList[i+1]
            myList[i+1]=temp
            swapped=i
    if swapped == -1:
        break
print(myList)

如果您计算此示例的行数并将它们与原件进行比较,您会发现原件短了 1 行。在我看来,检查一个值是比使用while True:(或while False:就此而言)更好的工作方式。

于 2012-12-03T13:06:26.043 回答
1

我认为您的所有问题都已得到解答(它们 while(True) = 无限循环),并且 swapped 充当“已排序”标志。

在 python 中非常酷的一件事是您不需要像在 c 中那样使用临时变量,因此您可以将 if 语句更改为:

if myList[i]>myList[i+1]:
    myList[i+1], myList[i] = myList[i], myList[i+1]
    swapped=i

或者

if myList[i]>myList[i+1]:
    j = i + 1
    myList[j], myList[i] = myList[i], myList[j]
    swapped=i

如果您不想计算 i+1 两次

还要注意 range(0,-1) 返回一个空列表而不是抛出异常

于 2012-12-03T13:16:59.353 回答