问题描述
在教程视频中,我正在观看 for 循环中使用的范围是“range(len(l))”,它成功地反转了列表。
但我想简单地输入“ l ”就可以解决问题,但没有人能告诉我这是为什么吗?
system("del file.txt");
解决方法
我不确定您观看的教程做了什么,但 range(len(_))
不会反转,它只会创建一个 range
大小的列表,从 0 开始。
如果您想在 Python 中反转列表,只需使用内置的 reversed
:
l = list("hello")
print(list(reversed(l))) # at list to have an actual list as opposed to an iterator
# ['o','l','e','h']
print(range(len(l)))
# range(0,5)
PS:您的解决方案不起作用的原因是您正在使用 pop
更改在迭代期间迭代的对象。一个简单的调试方法是添加一个打印语句:
def reversed_list(l):
rev = []
for i in l:
print("This is l:",l)
l_popped = l.pop()
rev.append(l_popped)
return rev
print(reversed_list([1,2,3,4]))
# This is l: [1,4]
# This is l: [1,3]
# [4,3]
,
这个循环是问题的根本原因。
for i in l:
l_popped = l.pop()
rev.append(l_popped)
return rev
让我们尝试试运行。
当 i = 1(索引 0)时,它弹出 4 并且 rev = [4],l = [1,3]
当 i = 2(索引 1)时,它弹出 3 并且 rev = [4,3],2]
现在,索引跨越 l 的长度,因此不会执行对剩余元素的操作。
如果你真的想用 sort
来反转一个列表,你可以做一个原始列表的浅拷贝。每次迭代,列表的长度都会减少
namespace Api {
export async function get(url:string){
const res = await fetch("api/"+url)
return await res.json()
}
export class Users {
private uid: string
constructor(uid: string){
this.uid = uid
}
public async getUserProfile(){
return await get(`/u/${this.uid}/profile`)
}
public async getUserSongs(){
return await get(`/u/${this.uid}/musics`)
}
}
}