使用append和pop方法反转python中的列表

问题描述

在教程视频中,我正在观看 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`)
        }
    }
}

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...