我刚刚在python-3中实现了Quicksort,以下是每个子数组中涉及的交换机制的摘录。

现在,我不禁注意到它看起来非常像基于C的循环。这是有道理的,因为我要从事很长时间的C ++开发。
我想知道是否可以使此循环更pythonic。

我尝试使用for items in array,但这没有帮助,因为迭代器不应在循环的每一轮都增加。

任何建议表示赞赏!

#  last elem is pivot at start
pivPos = end
#  iterate the list and bring pivot to correct position
count = 0

while (count != pivPos):

    #  swap places with elem just before pivot
    if arr[count] >= arr[pivPos]:
        temp = arr[count]
        arr[count] = arr[pivPos - 1]
        arr[pivPos - 1] = temp

        #  now swap the pivot
        arr[pivPos - 1] = arr[pivPos]
        arr[pivPos] = temp

        #  update pivPos
        pivPos -= 1

    else:
        count += 1
        continue

最佳答案

这部分:

temp = arr[count]
arr[count] = arr[pivPos - 1]
arr[pivPos - 1] = temp
arr[pivPos - 1] = arr[pivPos]
arr[pivPos] = temp


可以这样写而无需temp

arr[count], arr[pivPos-1], arr[pivPos] = arr[pivPos-1], arr[pivPos], arr[count]


同样,continue是多余的,您可以将其删除,并且代码的行为相同。

但是,真正的pythonic方法是:

arr.sort()


完整编辑的代码易于参考:

pivPos = end
count = 0
while count != pivPos:
    if arr[count] >= arr[pivPos]:
        arr[count], arr[pivPos-1], arr[pivPos] = arr[pivPos-1], arr[pivPos], arr[count]
        pivPos -= 1
    else:
        count += 1

关于python - 如何使以下快速排序更加“pythonic”,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52506180/

10-11 09:00