我试图创建一个溢出的pythonic list,这意味着如果我试图得到list的索引,即使索引大于list的大小。如果索引大于列表的大小,我想从列表的开头开始获取索引。例如,如果列表大小为5
l = [1,2,3,4,5]
因此l[7]应返回3 [索引2]谢谢你!
l[7]
3
osh3o9ms1#
您将需要使用%(模)运算符来处理这种情况,我将假设您的意思是l[7]应该返回3(在列表中的索引2处)。
%
2
def overflow_index(l, idx): return l[idx % len(l)] L = [1, 2, 3, 4, 5] print(overflow_index(L, 7)) # Output: 3
一个面向对象的解决方案,定义list的子类并覆盖其处理下标访问的__getitem__方法,即l[7]:
list
__getitem__
class OverflowList(list): def __getitem__(self, idx): return super().__getitem__(idx % len(self)) OL = OverflowList([1, 2, 3, 4, 5]) print(OL[7]) # Output: 3
super().__getitem__函数引用了内置的list的方法,需要调用该方法来防止无限递归。
super().__getitem__
o3imoua42#
你的问题不清楚:假设:
l = [1,2,3,4,5] l[0] is 1 l[1] is 2 and so on...
您可以执行forloop来打印所有值:
forloop
for x in range(len(l)): print(l[x])
现在,如果您想在x中插入较大的值,则可以使用mod operator %
mod operator %
l[x%len(l)]
这里x可以是任意大的数。
when x=7: l[7%len(l)] # output 3 when x=5: l[5%len(l)] # output 1
2条答案
按热度按时间osh3o9ms1#
您将需要使用
%
(模)运算符来处理这种情况,我将假设您的意思是l[7]
应该返回3
(在列表中的索引2
处)。一个面向对象的解决方案,定义
list
的子类并覆盖其处理下标访问的__getitem__
方法,即l[7]
:super().__getitem__
函数引用了内置的list
的方法,需要调用该方法来防止无限递归。o3imoua42#
你的问题不清楚:
假设:
您可以执行
forloop
来打印所有值:现在,如果您想在x中插入较大的值,则可以使用
mod operator %
这里x可以是任意大的数。