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
相关产品推荐
相关产品推荐

