我可以在Python中对空列表使用insert()吗?

2024-05-14 09:46:56 发布

您现在位置:Python中文网/ 问答频道 /正文

我很困惑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'],这显然是错误的。 任何帮助都将不胜感激。我所用的逻辑有问题吗?在


Tags: 函数字符串代码textin列表forlen
3条回答

若要在列表的开头插入(无论是否为空),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']

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

一种补救办法就是在0位置插入:

^{pr2}$

(以防万一:在python中最简单的方法是:'Hello'[::-1]。在

你的另一种方法是怎样修正的。在

你的方法的问题是你的列表每次迭代都会改变。所以元素的插入位置与列表的当前长度有关。以下是您for循环的基本操作步骤:

>>> rev = []
>>> l = len('Hello') - 1
>>> l
4
>>> # first iteration
>>> rev.insert(l, 'H')
>>> rev
['H']
>>> l -= 1
>>> l
3
>>> # second iteration
>>> rev.insert(l, 'e')
>>> rev
['H', 'e']
>>> l -= 1
>>> l
2
>>> # third iteration
>>> rev.insert(l, 'l')
>>> rev
['H', 'e', 'l']
>>> l -= 1
>>> l
1
>>> # fourth iteration
>>> rev.insert(l, 'l')
>>> rev
['H', 'l', 'e', 'l']
>>> l -= 1
>>> l
0
>>> # Fifth iteration
>>> rev.insert(l, 'o')
>>> rev
['o', 'H', 'l', 'e', 'l']
>>> l -= 1
>>> l
-1
>>> # end

如您所见,您的插入位置根据列表的增长而变化。有时insert的行为与append()相似,而有时它又回到{}的行为。在

您可以通过使插入位置0来解决此问题。这样,无论列表如何更改,始终将附加到列表的开头:

^{pr2}$

相关问题 更多 >

    热门问题