与大多数语言一样,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在这种情况下会带来更多的问题和复杂性吗?)