如何清理 Python 中的这个选择排序函数?
How can I clean up this Selection Sort function in Python?
我刚刚将一个用 C++ 编写的选择排序函数转换为 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
代码实际上看起来已经很 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
来源:
我刚刚将一个用 C++ 编写的选择排序函数转换为 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
代码实际上看起来已经很 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
来源: