如何使以下快速排序更加“ pythonic”

时间:2018-09-25 20:27:21

标签: python python-3.x quicksort

我刚刚在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

1 个答案:

答案 0 :(得分:3)

此部分:

print([i for i in d if len(set(i) - set(d[i])) == 2])

可以这样写而无需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] 也是多余的,您可以将其删除,并且代码的行为相同。

但是真正的pythonic方式是:

continue

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

arr.sort()