在Python中,与大多数语言一样,可以使用0访问列表中的第一项。但是从1开始是更好的选择吗?

在Python中,与大多数语言一样,可以使用0访问列表中的第一项。但是从1开始是更好的选择吗?,python,Python,与大多数语言一样,Python列表(或字符串)中的第一项索引为0。但是,如果可以访问值为-1的列表(或字符串)中的最后一项,那么这种设计有意义吗。例如: my_list = list("Madam Im Adam") print(my_list[0]) # prints M print(my_list[-1]) # prints m 既然Python允许程序员使用负值访问列表的末尾,那么打破惯例,设计Python使列表索引从1开始,难道没有意义吗?例如,检查这个识别回文的简单算法: phr

与大多数语言一样,Python列表(或字符串)中的第一项索引为0。但是,如果可以访问值为-1的列表(或字符串)中的最后一项,那么这种设计有意义吗。例如:

my_list = list("Madam Im Adam")
print(my_list[0]) 
# prints M
print(my_list[-1]) 
# prints m
既然Python允许程序员使用负值访问列表的末尾,那么打破惯例,设计Python使列表索引从1开始,难道没有意义吗?例如,检查这个识别回文的简单算法:

phrase = "madam im adam"
for i in range(0, len(phrase ) // 2):   
    if phrase [i] != phrase [-i - 1]:   #awkward!!!! (why not just -i?)
        is_palindrome = False

if is_palindrome:
    print("It's a palindrome")
else:
    print("It's NOT a palindrome")
如果列表和字符串索引从1开始,而不是从0开始,则使用下面这一行执行上述算法:

if phrase [i] != phrase [-i - 1]:
可以简单地写为:

if phrase [i] != phrase [-i]:
阅读和理解起来要简单得多。这是Python中的一个设计缺陷吗


(Guido van Rossum可能有理由将列表索引设置为0。如果他想保留传统的功能,但同时也要创建一种回文算法易于编写的语言,那么他指定列表中的最后一个项使用值-0而不是-1来访问是否有意义?或者在本上下文中,是否使用-0来访问是否会产生更多的问题和复杂性?

即使我们已经超越了C对从0开始的数组的推理(即数组索引是内存地址偏移的直接抽象),在0处启动数组/列表索引仍然简化了许多与索引相关的不同数学内容。这些内容比反向列表索引更常见,因此从设计角度来看,优先考虑它们是有意义的

至于负面列表索引,实际上没有太多其他选择。毕竟,索引必须是整数,虽然
0
-0
在浮点标准中可能有意义的不同,但它们的计算结果是相同的整数值,因此无法区分。我们需要使用一些东西来代替,并且
-1
ma这是最有意义的

某些编程语言是单索引的,包括(但不限于)MATLAB、Mathematica、Lua、APL,甚至grandaddy FORTRAN。你会注意到这些语言的设计目的有一个主题——它们都不是面向通用软件开发或计算机任务的。相反,它们偏向于数学任务,偏向于1-索引更方便或更简单的用例和函数Python有不同的优先级


如果你需要在抽象中总结一下,你可以考虑我们如何用其他语言来做索引,比如说:java:< /p>

boolean isPalindrome(List x) {
    for(int i = 0; i < x.size() / 2; i++)
        if(x.get(i) != x.get(x.size() - i - 1))
            return false;
    return true;
}
boolean isPalindrome(列表x){
对于(int i=0;i

注意这里也有
i-1
——这与索引的思想完全相同,只是python不再要求我们显式地查找列表的长度,这使它稍微方便了一些。

是的,-0会带来更多的问题和复杂性。因为根据定义,integer和long没有-0。有趣的是g关于这个问题的帖子:作者问:“我对使用python列表对象很感兴趣,但功能稍有改动。特别是,我希望列表是1索引而不是0索引。”(请不要这样做,只是为了好玩。)谢谢。非常有用。到Quora帖子的链接也很有价值。