我知道python列表从0到n的索引开始。 因此,就像列表l的第一个元素是l [0]等。
这太微不足道了。但是,当事情变得混乱和复杂时,我发现自己在努力寻找正确的索引。由于这个事实,每次我要访问一个元素时,我都必须补偿长度+/- 1。
这看起来像是一个简单的问题。但事实并非如此。有没有系统的方法可以解决这个问题?有没有一种从不同角度看待这个问题的方法?
答案 0 :(得分:2)
我不确定您如何看待它。但是,这就是我第一次理解这个概念的方式: 在python以及大多数其他编程语言中,数组的位置更像是距起点的距离。如果您从C开始进行编程学习,这真的很有帮助,其中C存储在连续的内存块中。因此,如果我有一个长度为5的int数组,则该语言将分配一个10字节的块(默认情况下,C中的int为2字节)。现在,第一个int存储在块的第一个2字节槽中,即就在开头。因此,该项目到起点的距离为0,这是该项目在数组中的索引。下一个整数存储在字节3-4中,即该块的第二个插槽中。现在,该插槽到起点的距离为1个插槽,因此索引为1,依此类推。
希望这种研究语言复杂性的方法对您有所帮助。但是,如果您给我一个用例来面对索引方面的挑战,那么我将能够为您提供更多帮助。
答案 1 :(得分:2)
当我向初学者讲授元素索引的概念时,我所用的隐喻是思考标尺中的索引和数字。列表中的内容(或数组,向量,字符串等)中的内容,作为放置在此标尺上的物理对象,例如小卵石或其他任何东西。您将对象放置在数字之间-而不是放置在它们的中间。因此,第一个石块位于0和1标记之间的空间中。第二个是1和2之间的空格。 即使标尺长30厘米,最后一个标尺仍将位于29个和30个标记之间的空间上-30标尺之后,标尺就结束了,无法放置其他任何元素。
这不仅有助于可视化元素如何从索引0开始,而且还可以使用Python切片表示法,其中切片的末尾表示拾取元素的限制(而不是最后一个要拾取的元素)。 / p>
因此,在列表上,lst [0:1]将选择0和1标记之间的所有元素,lst [0:28]将选择这些数字之间的元素,以及最后两个元素[28]之间:30]排除在外。
(不相关的注释,我希望您实际上不要将flutter emulators --launch apple_ios_simulator
用作变量名-一个字母字母的变量名通常不是一种好的做法,从好的意义上讲是通行的,但是l
是难以与l
区分开来,因此使代码更难阅读)