You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python如何实现元组列表的起始索引从1而非0开始

Python实现列表从下标1开始访问的三种常用方案

注意不要使用list作为变量名,它是Python内置类型关键字,覆盖后会引发后续代码异常


方案1:列表头部插入占位符(最简单快捷)

适合临时使用、不想改动过多代码的场景

# 原列表
my_list = [('Green',45.87), ('Yellow',67.43), ('Red',89.98)]
# 头部插入占位元素,占住下标0的位置
my_list.insert(0, None)

# 访问测试
print(my_list[1]) # 输出 ('Green', 45.87)
print(my_list[2]) # 输出 ('Yellow', 67.43)
print(my_list[3]) # 输出 ('Red', 89.98)

方案2:自定义1基序列类(功能最完整,兼容列表原生方法)

适合需要长期使用1基下标、同时要保留列表所有内置方法的场景

class OneBasedList(list):
    def __getitem__(self, index):
        # 下标从1开始,0下标抛异常
        if index == 0:
            raise IndexError("列表下标从1开始")
        return super().__getitem__(index - 1)
    
    def __setitem__(self, index, value):
        if index == 0:
            raise IndexError("列表下标从1开始")
        super().__setitem__(index - 1, value)

# 使用示例
my_list = OneBasedList([('Green',45.87), ('Yellow',67.43), ('Red',89.98)])
print(my_list[1]) # 输出 ('Green', 45.87)
my_list[1] = ('Blue', 23.45) # 支持赋值操作

方案3:用字典映射下标(适合只读场景)

适合只需要做访问、不需要修改原列表的场景

my_list = [('Green',45.87), ('Yellow',67.43), ('Red',89.98)]
# 生成1开始的key的字典
one_based_map = {i+1: val for i, val in enumerate(my_list)}

print(one_based_map[1]) # 输出 ('Green', 45.87)

内容的提问来源于stack exchange,提问作者tuborg10

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 23:36:03