是否可让多个键指向同一个对象?实现列表多索引返回相同值需求
实现方案
你可以通过重写序列的索引访问逻辑,或者直接用分组计算的方式实现需求,不需要重复存储相同值。
方案1:直接用计算式访问(无需自定义类,最简便)
你只需要把不重复的实际值存储到一个基础列表,访问的时候用公式计算对应分组下标即可:
- 每4个索引为一组,1开头的索引对应基础列表的下标为
(i-1) // 4,如果你的索引是从0开始的话,直接用i // 4即可
示例代码(Python):
# 仅存储每组的实际值,没有重复内容 base_values = ["第一组返回值", "第二组返回值", "第三组返回值"] # 访问索引3,属于第一组 i = 3 result = base_values[(i - 1) // 4] print(result) # 输出:第一组返回值 # 访问索引6,属于第二组 i = 6 result = base_values[(i - 1) // 4] print(result) # 输出:第二组返回值
方案2:自定义列表类,实现原生myList[i]访问效果
如果要保持原生列表的调用方式,可以自定义类重写索引访问逻辑:
class GroupedList: def __init__(self, base_values, group_size=4): self.base_values = base_values self.group_size = group_size def __getitem__(self, i): # 适配1开头的索引,如果使用0开头索引去掉减1逻辑即可 group_idx = (i - 1) // self.group_size return self.base_values[group_idx] # 用法示例 myList = GroupedList(["值A", "值B", "值C"]) print(myList[2]) # 输出值A print(myList[4]) # 输出值A print(myList[5]) # 输出值B print(myList[8]) # 输出值B
如果需要支持修改值、查询长度等其他列表能力,可以继续添加__setitem__、__len__等对应魔法方法即可。
内容的提问来源于stack exchange,提问作者Vodis
相关产品推荐
相关产品推荐

