python - 解释这个 python while 循环如何返回列表中元素的相反顺序
问题描述
有人可以向我解释这个 python 循环如何输出列表中元素的相反顺序吗?这是学校作业的一部分,我不太明白它是如何工作的。
我知道这是获取列表反向顺序的一种更困难的方法,但是我们不允许使用反向功能,而且我似乎无法让列表拼接通过自动评分器。
def reverse_list(stuff):
'''Function that reverses the order of elements in a list'''
i = 0
n = len(stuff)-1
while i<n:
temp = stuff[i]
stuff[i] = stuff[n]
stuff[n] = temp
i+=1
n-=1
#test
stuff = [1,2,3,4]
reverse_list(stuff)
print(list) #Output [4,3,2,1]
解决方案
使用更好的名称,以及您可能更容易理解的印刷品
def reverse_list(stuff):
begin = 0
end = len(stuff) - 1
while begin < end:
temp = stuff[begin]
stuff[begin] = stuff[end]
stuff[end] = temp
begin += 1
end -= 1
print(stuff)
对于输入[1, 2, 3, 4, 5, 6, 7, 8, 9]
,您将看到
[1, 2, 3, 4, 5, 6, 7, 8, 9]
[9, 2, 3, 4, 5, 6, 7, 8, 1] # swap 1 and 9
[9, 8, 3, 4, 5, 6, 7, 2, 1] # swap 2 and 8
[9, 8, 7, 4, 5, 6, 3, 2, 1] # swap 3 and 7
[9, 8, 7, 6, 5, 4, 3, 2, 1] # swap 4 and 6
方法是,获取两个索引
- 一个从头开始并递增:
begin
- 一个从末尾开始并递减:
end
每次交换时,然后使用第三个变量temp
,然后 2 乘 2 你将全部交换,直到你到达中间
推荐阅读
- java - 如何从文件中读取信息并将信息存储在链表(Java)中?
- php - 使用 laravel 和 react-router 的 url 路径出错
- docker - Traefik 无法负载平衡 docker 副本
- java - TomEE 战争部署失败
- clonezilla - 带有安全启动的 cdrom 中的 Clonezilla
- tfs - 将 TF CLC 连接到本地 TFS 2017
- python - Django:使用 if elif 根据 URL 显示来自视图的不同数据
- python - Selenium webdriver 在没有会话的情况下关闭
- php - 我们如何在 PHP 中动态更改使用 GD 库创建的 png 图像的宽度和高度?
- java - Java 时钟项目 - Tick 方法在分钟和秒内输出“0”而不是“00”,修复 AM PM 的输出