社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

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

Luke F. • 5 年前 • 1511 次点击  

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

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/53740
 
1511 次点击  
文章 [ 1 ]  |  最新文章 5 年前
Green Cloak Guy
Reply   •   1 楼
Green Cloak Guy    5 年前

即使我们已经移动了C从0开始的数组推理(即数组索引是内存地址偏移的直接抽象),在0开始数组/列表索引仍然简化了许多不同的索引相关的数学东西。 Here's a Quora post on the subject . 这些东西是 许多的 比反向列表索引更常见的用例,所以从设计的角度来看,它们将被优先考虑。

0 -0 某物 相反,和 -1

某些编程语言 1索引,包括(但不限于)MATLAB、Mathematica、Lua、APL,甚至grandaddy FORTRAN。在这里,您将注意到这些语言设计用来做什么的一个主题—它们都不是面向通用软件开发或 计算机 数学的 任务,面向用例和功能,其中1-索引更方便或更有意义。Python有不同的优先级。


如果你需要在抽象中总结你的脑袋,你可以考虑我们如何用其他语言来做索引。

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;
}

请注意 i - 1