python - 如何使用嵌套的 for 循环重写这个 while 循环?
问题描述
我遵循了一个带有while
循环的算法,但问题的一个参数是我使用嵌套的 for 循环,我不知道该怎么做。
这是while
循环:
i = len(lst)
while i > 0:
big = lst.index(max(lst[0:i]))
lst[big], lst[i-1] = lst[i-1], lst[big]
i = i - 1
return lst
这是它要回答的问题:
输入:[5,1,7,3]
首先,找到最大的数,即7
。
将它与当前位于列表末尾的数字交换,即3
. 现在我们有:[5,1,3,7]
现在,找到最大的数,不包括7
,即5
。
交换它和倒数第二个数字,即3
. 现在我们有:[3,1,5,7]
。
现在,找到第三大数(不包括前两个数),即3
。
交换它和倒数第三个数字,即1
.
输出:[1, 3, 5, 7]
解决方案
您在算法中看到的是选择排序。这是您提出的第二个解决方案(嵌套for
循环):
def insertion_sort(arr):
l = len(arr)
for i in range(l-1, -1, -1):
m = -10000 # it should be lower than min(arr)
idx = -1
for key, val in enumerate(arr[:i+1]):
if m < val:
m = val
idx = key
if idx != -1:
arr[i], arr[idx] = arr[idx], arr[i]
return arr
快速测试:
arr = list(range(10))[::-1]
print(arr)
# prints [9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
result = insertion_sort(arr)
print(result)
# prints [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
推荐阅读
- c# - 将日期/时间转换为字符串时出错
- python - 在python中返回函数的值
- java - 捕获字符串中属性的值?
- docker - Docker(docker-compose.yml 文件)定义网络
- php - 如何使用 codeigniter 在邮件中设置动态标题?
- hyperledger-fabric - Hyperledger Fabric 中的对等通道创建失败
- react-native - 监视 this.state 以外的对象/字符串
- c++ - 具有多个可执行文件和依赖项的 Makefile
- javascript - D3 Persistent Path d 过渡期间的预期数字错误
- python - Python 机械化设置 cookie