gpt4 book ai didi

python - 如何为嵌套列表建立索引?

转载 作者:太空宇宙 更新时间:2023-11-03 17:09:09 24 4
gpt4 key购买 nike

当在类中遇到嵌套列表时(更具体地说,我应该将其称为多元函数),我可以使用 __getitem__有两个或多个参数的方法?

我知道这不是 __getitem__ 的典型用法我应该将它写为类的方法,但我真的想利用它的 []功能。

最佳答案

这确实一点也不非典型; numpy 总是这样做。 __getitem__ 接受单个参数;它可以是一个元组。您只需要自己解析元组即可。

class Indexer(object):
def __init__(self, *args, **kwargs):
pass
def __getitem__(self, item):
if isinstance(item, tuple):
# do special processing for tuples here
print(item)
# Everyone likes the number 3, so make sure to return an extra 3.
return [item, 3]
i = Indexer()

# this will print (2, 3), and got_item will have the value [(2, 3), 3]
got_item = i[2,3]

# This will print [(2, 3), 3]
print(got_item)

显然没有真正的理由返回[item, 3],但它只是表明__getitem__内部的代码可以做任何它想做的事情。您可以退回任何您想要的东西。

每当 Python 解释器看到您索引某些内容时(如代码示例中的 i[2, 3] 所示),它所做的第一件事就是用方括号之间的内容构建一个元组。您可以使用dis来检查这一点模块,它反汇编 python 代码以查看解释器真正在做什么:

import dis
dis.dis('a[b, c]')

1 0 LOAD_NAME 0 (a)
3 LOAD_NAME 1 (b)
6 LOAD_NAME 2 (c)
9 BUILD_TUPLE 2
12 BINARY_SUBSCR
13 RETURN_VALUE

如果您以前从未见过 dis 的输出,它可能会有点令人困惑。重要的部分是BUILD_TUPLE之前它说BINARY_SUBSCR

这可能是太多信息:重要的是您可以使用 __getitem__ 做任何您想做的事情。

关于python - 如何为嵌套列表建立索引?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34292377/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com