我刚刚经历了一次,并将用C ++编写的Selection Sort函数转换为Python。
我觉得自己像C程序员一样在编写代码,但是我知道Python有很多内置函数可以与for循环一起使用来清理它。我只是不确定从哪里开始。
我可以在此代码中进行哪些更改以使其更加惯用?
def selection_sort(A):
for i in range(0, len(A) - 1):
min_idx = i
for j in range(i + 1, len(A)):
if A[j] < A[min_idx]:
min_idx = j
if min_idx != i:
A[i], A[min_idx] = A[min_idx], A[i]
return A
答案 0 :(得分:0)
列表具有sort()函数,可以为您完成工作。
答案 1 :(得分:0)
该代码实际上看起来已经非常具有Pythonic了!值得注意的是,您使用x, y = y, x
惯用语交换值,在Python中强烈建议这样做。
Python2和Python3:
range(0, x)
等同于range(x)
A.index(min(A[i:]))
查找最小值索引。这在很大程度上取决于口味,并且列表很大时,速度会变慢。恕我直言,看起来很简洁:def selection_sort(A):
for i in range(0, len(A) - 1):
min_idx = A.index(min(A[i:]))
if min_idx != i:
A[i], A[min_idx] = A[min_idx], A[i]
return A
Python2:
range
创建一个列表-遍历所有元素-立即生成,xrange
生成一个惰性生成器-仅在需要调用时才遍历元素-这是首选方法,而且通常更快(不是您提供的摘要中的速度更快)。常规:
def selection_sort(A):
"""selection_sort performs an unstable in-place sort on A
A -- list to be sorted.
Returns A, sorted.
"""
for i in range(0, len(A) - 1):
min_idx = i
for j in range(i + 1, len(A)):
if A[j] < A[min_idx]:
min_idx = j
if min_idx != i:
A[i], A[min_idx] = A[min_idx], A[i]
return A
来源: