- 在python中,可以在空列表中使用insert()?

我对python中的insert()函数的工作原理感到困惑,下面是我的代码:


def reverse(text):


 rev = []


 l = len(text) - 1


 for c in text:


 rev.insert(l, c)


 l -= 1


 return rev



print reverse("Hello")



然而我得到的输出 ['o', 'H', 'l', 'e', 'l'],这显然是错误的,我应用的逻辑有什么错误?

时间:

若要在列表(空的或不)的开头插入,insert()的第一个参数必须是0

最小代码例子


l = [*'Hello']



rev = []


for c in l:


 rev.insert(0, c)



rev


# ['o', 'l', 'l', 'e', 'H']



是的,你可以在python的空列表中使用insert() ,这直接导致代码问题:


rev = []


rev.insert(3, 'a') # ['a']



如果索引大于列表的长度,则只会追加该项目。在代码中,第一个插入是位于位置5处的'H' ; 但这将导致rev =['H'] ,这是'H'的错误位置,

补救方法是在0位置插入:


def reverse(text):


 rev = []


 for c in text:


 rev.insert(0, c)


 return rev



(以防万一:在python中执行这个操作的最简单方法是: 'Hello'[::-1]

你要查找的是deque


from collections import deque



s ="Hello"



d = deque() #create a deque object



for i in s:


 d.appendleft(i)



print(''.join(d))



输出:

 
olleH



 

deque提供了在两端创建可变列表的选项,方法appendleft()insert(0, value)相同。

在python中,列表为零索引,所以,当你做insert(1,c)的时候,你实际上是在列表中的第二个位置插入,若要在列表的开头插入,请使用insert(0,c)

你可以按以下方式尝试:


def reverse(text):


 rev = []


 for c in text:


 rev.insert(0, c)


 return rev



print reverse("Hello")




def reverse(text):


 revText = text[::-1]


 return list(revText)



print reverse("Hello")



结果


['o', 'l', 'l', 'e', 'H']



...