Python索引说明

2024-04-19 18:28:09 发布

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

我不明白在Python中索引是如何通过循环的。你知道吗

在这段相当简单的代码中,del l[i+1]为什么会给出索引越界错误?支票不是由while循环处理吗?如何检查是否处于循环的末尾?你知道吗

def getString(str):
    l = list(str)
    i=0
    while i < len(l)-1 and i != len(l)-1:
        if l[i] == l[i+1]:
            del l[i]
            del l[i+1]
            i=0
            if len(l) == 0:
                print("Empty String")
                break
        else:
            i+=1
    print(l)

str = "aabbcc"
getString(str)

Tags: and代码lenifdef错误listprint
2条回答

删除l[i]时,会将列表缩小一倍。如果您做了del l[i+1]就可以了,或者如果您按相反的顺序删除了,那么就可以了,但是首先删除前面的元素意味着您实际上是在删除元素i+2(基于循环执行开始时的原始列表)。你知道吗

只需切换到:

        del l[i+1]
        del l[i]

或者更有效地同时删除两个元素:

        del l[i:i+2]

会解决这个问题。你知道吗

如图所示,考虑[1, 2](我们假设您的if检查通过了,我使用了不同的值使其更易于理解)。当i0时,您del l[0],将l保留为[2],然后您del l[1],它现在已超过列表的末尾。如果你先del l[1],你就有了[1],而del l[0]工作得很好。你知道吗

@ShadowRanger's answer是正确的。您可以在命令行中使用python来查看区别:

$ python
Python 2.7.13 (default, Dec 27 2016, 14:14:52) 
[GCC 4.2.1 Compatible Apple LLVM 8.0.0 (clang-800.0.42.1)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> l = [1,2,3,4]
>>> i=1
>>> del l[i]
>>> del l[i+1]
>>> l
[1, 3]   # note that we went one further because the list shrank
>>> l=[1,2,3,4]
>>> del l[i+1]
>>> del l[i]
>>> l
[1, 4]   # deleted adjacent items as expected
>>>

相关问题 更多 >