我们改变了列表的顺序,现在我们需要一种通过索引和匹配行为访问元素的机制

2024-04-25 19:25:21 发布

您现在位置:Python中文网/ 问答频道 /正文

有一个类BaseFormSet

class BaseFormSet(object):
    def __iter__(self):
        return iter(self.forms)

    def __getitem__(self, index):
        return self.forms[index]

其中self.forms是一个列表。在文档中,他们告诉我们这个类表示一组表单,其顺序与创建表单的顺序相同。我们可以改变顺序:我们必须重写BaseFormSet的_iter__;()方法。但是如果我们重写了uu iter uuu(),我们还需要重写uu getitem uuu(),以获得匹配的行为

嗯,这个_ugetItem _;()让我有点吃惊

事实上,我们在谈论清单。因此,在本例中,我将使用一个列表

这就是我所能想到的:

l = [0, 1, 2, 3, 4, 5] // Imitating a formset.

def get_reversed_index(length, index):
    return -(index+1) % length


def print_result(i):
    reversed_index = get_reversed_index(len(l), i)
    return "Index {}, reversed {}, reversed value {}".format(i, reversed_index, l[reversed_index])

这似乎扭转了指数。但这是文档所暗示的匹配行为吗

困扰我的是:myMy代码似乎无法引发索引器异常

IndexError: list index out of range
In case of ordinary 
print(l[10])

你能帮我一下吗:需要什么样的匹配行为?我的例子是否是垃圾

另外,这个班是从Django来的


Tags: 文档self表单列表indexreturn顺序def
1条回答
网友
1楼 · 发布于 2024-04-25 19:25:21

我很难理解您的问题,但是如果您的意思是希望从“反向”索引中引发异常,那么您需要更改get_reversed_index函数

目前,由于%或mod运算符,此函数的输出保证在范围[0, length)内。因此,如果您想生成超出范围的索引,请尝试删除% length

相关问题 更多 >