python列表下标索引初始值从1开始

有没有人告诉我python序列下表索引如何从0开始修改为从1开始?

因为 python 不支持重载运算符,只能找变通办法
比如说在列表前面垫一个没用的元素占0的坑
lst = [ None , 1, 2, 3, 4, 5 ]
或者可以写一个函数

def getNumberOf(lst, n):
    return lst[lst, n - 1]


arr = ["a","b","b","c","d"]
for item,index in enumerate(arr,start=1):
    print(index,item)
不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 这有个类似的问题, 你可以参考下: https://ask.csdn.net/questions/7699727
  • 这篇博客你也可以参考下:Python有那些常见的基础知识?0基础常见知识总结
  • 你还可以看下python参考手册中的 python- 用列表实现队列
  • 除此之外, 这篇博客: Python列表索引为何从0始?中的 其它编程语言的索引? 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:

    索引从0开始的编程语言:C、C++、Python、Java、PHP、Ruby、Javascript...

    索引从1开始的编程语言:ABC、Matlab、VB、易语言、大部分shell语言...

    索引从其它值开始的编程语言:Pascal、Lua...

    还有像表示星期、月份等序列结构的数据,各种编程语言也划分成了不同阵营。

    它们出于何种考虑?

    C语言:索引从0开始,可以大大提升内存寻址计算的效率,详细分析参考《[C语言数组元素下标为何从0开始](https://blog.csdn.net/bufanq/article/details/51330197)》

    大部分shell语言:大多数是从1开始,来源参考[stackexchange这篇问答](https://unix.stackexchange.com/questions/252368/is-there-a-reason-why-the-first-element-of-a-zsh-array-is-indexed-by-1-instead-o)

    Pascal、Lua:默认从1开始,但支持改变起始索引值,原因据说是对非专业的开发者更友好,来源参考[这篇知乎问答](https://www.zhihu.com/question/19675689/answer/19174752)

    以上列举的原因是最审慎的、体面的解释,话题应该到此终结,因为“索引应该从几开始最好”这个问题的破坏性不亚于“哪种编程语言是最好的”......

  • 您还可以看一下 CSDN就业班老师的Python全栈工程师特训班第九期-直播回放课程中的 Python全栈工程师特训班第九期-第十周-1小节, 巩固相关知识点
  • 以下回答来自chatgpt:

    问题的解决方案是修改Python中的默认索引起始值。Python中的列表索引默认从0开始,如果要将索引起始值修改为1,可以考虑使用自定义的索引函数进行操作。

    以下是一个示例代码,可以通过自定义的索引函数实现修改列表索引初始值为1:

    class IndexableList:
        def __init__(self, data):
            self.data = data
    
        def __getitem__(self, index):
            if isinstance(index, int):
                if index >= 1:
                    return self.data[index - 1]
                else:
                    raise IndexError("Index must be greater than or equal to 1.")
            elif isinstance(index, slice):
                start, stop, step = index.start, index.stop, index.step
                if start is not None and start < 1:
                    raise IndexError("Start index must be greater than or equal to 1.")
                if stop is not None and stop < 1:
                    raise IndexError("Stop index must be greater than or equal to 1.")
                return self.data[start-1:stop-1:step]
    
        def __len__(self):
            return len(self.data)
    
    # 示例使用
    lst = [1, 2, 3, 4, 5]
    indexed_lst = IndexableList(lst)
    print(indexed_lst[1])  # 输出 1
    print(indexed_lst[2])  # 输出 2
    print(indexed_lst[3])  # 输出 3
    print(indexed_lst[4])  # 输出 4
    print(indexed_lst[5])  # 输出 5
    print(indexed_lst[:3])  # 输出 [1, 2, 3]
    print(indexed_lst[2:4])  # 输出 [2, 3, 4]
    

    通过自定义的 IndexableList 类,可以将列表的索引起始值修改为1,并能够正常使用取值和切片操作。示例中的 IndexableList 类重写了 __getitem__ 方法,用于获取指定索引的元素,同时处理了索引越界的情况。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^